さて、ここにコードがあります:
#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で再現しました。
2番目のケースでコンパイラが間違ったタイプを使用しているのはなぜですか?(明確にするために:列挙との競合があることは知っていますが、私の理解から、それが本当の問題である場合、最初のコードもコンパイルに失敗するはずです)