2

コンパイラを 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))
 ~~ ^  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

これがばかげた質問である場合は、事前にお詫び申し上げます。ポインタをいただければ幸いです。

4

1 に答える 1