コンパイラを GCC から Clang/LLVM に切り替えているところ、これまで経験したことのないコンパイル エラーが発生しています。
次のようなクラスがあります。
#include <iostream>
class foo {
public:
bar(std::istream& is) : _fp(is), _sCheck(is != std::cin) { /* ... */ }
private:
std::istream& _fp;
bool _sCheck;
}
このファイルをコンパイルすると、次のエラーが発生しclang++
、プライベート変数の初期化が_sCheck
失敗します。
error: invalid operands to binary expression ('std::istream' (aka
'basic_istream<char>') and 'istream' (aka 'basic_istream<char>'))
(is != std::cin)
~~ ^ ~~~~~~~~
このアドレス比較の両方のオブジェクトが同じ型である場合、 がエラーをclang++
返すのになぜエラーを返さg++
ないのでしょうか?
dynamic_cast
私はそれらを両方にしようとしましたstd::istream&
が、これもエラーを返しました:
error: invalid operands to binary expression ('std::istream' (aka
'basic_istream<char>') and 'std::istream')
(is != dynamic_cast<std::istream&>(std::cin))
~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
これがばかげた質問である場合は、事前にお詫び申し上げます。ポインタをいただければ幸いです。