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'
}
私の理解では、using
がtypedef
と同等であることである:私は私の問題を示していスニペットを持っています。なぜ最初の2つの宣言は機能しますが、3番目の宣言は私のIDEによってフラグが立てられますか?さらに、エラーなしでコンパイルすると、_P2*
ポインターを正常に取得できます。何が起きてる?
でbugですか?どのバージョン? – Rakete1111
CLion 2016.2.3、最新のアップデートあり。 – moarCoffee
アンダースコアで始まり大文字で始まる識別子は、実装に予約されています。それらを使うのは良い考えではありません。コードがコンパイルされることは保証されません。また、コンパイルされた場合には特定の効果が生じることはありません。 –