2016-11-12 7 views
1

私はC++をかなり新しくしていますので、私がここで素朴であれば私を許してください。クラス内でタイプエイリアスを使用しているときに "コンストラクタを解決できません"

template<typename _T, typename _Key, typename _Val> 
class Foo { 
    typedef std::pair<_Key, _Val> _P1; 
    using _P2 = std::pair<_Key, _Val>; 

    _T *t = new _T(); 
    _P1 *p1 = new _P1(); 
    _P2 *p2 = new _P2(); // (IDE) error: can't resolve constructor '_P2' 
} 

私の理解では、usingtypedefと同等であることである:私は私の問題を示していスニペットを持っています。なぜ最初の2つの宣言は機能しますが、3番目の宣言は私のIDEによってフラグが立てられますか?さらに、エラーなしでコンパイルすると、_P2*ポインターを正常に取得できます。何が起きてる?

+0

bugですか?どのバージョン? – Rakete1111

+0

CLion 2016.2.3、最新のアップデートあり。 – moarCoffee

+1

アンダースコアで始まり大文字で始まる識別子は、実装に予約されています。それらを使うのは良い考えではありません。コードがコンパイルされることは保証されません。また、コンパイルされた場合には特定の効果が生じることはありません。 –

答えて

0

(https://ideone.com/uuILus)どのIDEを使用している[それは私の作品]間違いなくCLion

関連する問題