好的,这是一个代码:
#include <sstream>
struct A {
class Type {};
template < typename Type >
Type as( void ) {
std::istringstream test;
Type temp;
test >> temp;
return temp;
}
};
它编译得很好,完全没有问题。
现在,这里几乎是相同的代码:
#include <sstream>
struct A {
class Type {};
template < typename Type >
inline Type as(void);
};
template < typename Type >
Type A::as( void ) {
std::istringstream test;
Type temp;
test >> temp;
return temp;
}
砰,它不再编译了。错误 :
t.cc:14:10: error: invalid operands to binary expression ('std::istringstream' (aka 'basic_istringstream<char>') and 'A::Type')
test >> temp;
~~~~ ^ ~~~~
我已经用 clang 和 gcc 重现了这种行为。
为什么编译器在第二种情况下使用错误的类型?(只是要清楚:我知道与枚举存在冲突,但据我了解,如果是真正的问题,第一个代码也应该无法编译)