我正在實施合併排序算法。問題是當我嘗試在算法中使用自動演繹類型的向量時。如何使用auto和decltype關鍵字來簡化模板參數推演?
template <typename TIterator, typename TCompare>
void mergeSort(TIterator begin, TIterator end, TCompare criterium)
{
//...
auto help = *begin; // help is a value (not a reference)
QVector<decltype(help)> leftPart; // now decltype(help) is also a value
//... // and not a reference
}
這工作。
但是,一旦我做出算法通過不斷引用傳遞TIterators
,我得到的,我從來沒有在我的整個生命得到了一個錯誤:
template <typename TIterator, typename TCompare>
void mergeSort(const TIterator& begin, const TIterator& end, TCompare criterium)
{
//...
auto help = *begin; // help is a value (not a reference)
QVector<decltype(help)> leftPart; // now decltype(help) is also a value
//...
}
結果:
In function 'void mergeSort(const TIterator&, const TIterator&, TCompare)':
internal compiler error: in type_unification_real, at cp/pt.c:14176
我使用g++ 4.6.3
上Ubuntu
出了什麼問題?
「內部編譯器錯誤」:看起來像一個編譯器錯誤給我,說實話 – Jasper
你不應該用'常量汽車&'在這種情況下? –
@LyubomirVasilev其實我想幫助是一個值,而不是一個參考,以便能夠申報同一類型的QVector爲幫助 –