我希望这段代码可以工作,但它无法用 GCC 编译。如果您将内部类取出,它会编译。
#include <algorithm>
template <typename T>
struct Outer
{
struct Inner
{
int x;
};
Inner vec[3];
};
template <typename T>
bool operator <(const typename Outer<T>::Inner& lhs, const typename Outer<T>::Inner& rhs)
{
return lhs.x < rhs.x;
}
int main()
{
Outer<int> out;
Outer<int>::Inner in;
std::lower_bound(out.vec, out.vec + 3, in);
}
GCC 4.4 有这样的说法:
...
bits/stl_algo.h:2442: error: no match for ‘operator<’ in ‘* __middle < __val’
GCC 4.7 打印了更多的东西,包括上面的,以这个结尾:
...
bits/stl_algobase.h:957:4: note: couldn't deduce template parameter ‘T’
我愿意相信它不是格式良好的 C++,但为什么不呢?