【发布时间】:2012-10-23 10:46:50
【问题描述】:
我正在实现合并排序算法。问题是当我尝试在算法中使用自动推导类型的向量时。
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
我在Ubuntu上使用g++ 4.6.3
出了什么问题?
【问题讨论】:
-
“内部编译器错误”:老实说,这对我来说就像一个编译器错误
-
在这种情况下你不应该使用
const auto&吗? -
@LyubomirVasilev 实际上我希望 help 是一个值,而不是一个引用,以便能够声明一个与 help 相同类型的 QVector
-
@Jasper:当然。无论输入多么奇怪,都不应该发生内部错误。
-
不管错误如何,将迭代器作为 const 引用传递是不常见的。按值是正确的。