2016-09-28 8 views
3

C++で同じusingエイリアスを複数回宣言することは合法ですか?私は1つのヘッダファイルが 'public'として使われているテンプレートライブラリを持っています。テンプレートクラスの宣言とエイリアス、そして '実装'ファイルがあります(文字通りではありません。パブリックヘッダーファイルには、その最後にすべての実装ヘッダーが含まれます。C++では 'using'エイリアスの複数の定義があります

実装ファイルからパブリックヘッダを含めることはできません。これは、循環依存性を引き起こす可能性があるためです。しかし、実装ファイルの中でヘッダファイルに宣言されているテンプレートエイリアスを使用したい。

例:

「国民ヘッダー:

using true_type = logical_constant<true>; 
using false_type = logical_constant<false>; 

のプライベート "実装ファイル:

使用して別名の別名の両方限り
using true_type = logical_constant<true>; 
using false_type = logical_constant<false>; 

同じこと、これは合法ですか?このシンプルな例は私にとってMSVC 14で働いていましたが、同じように複雑なエイリアスを使用しようとしたとき、コンパイラは不平を言っていました。

+0

コンパイラが提供する「より複雑なエイリアス」と正確な苦情の例を挙げることができますか? – kdelaney

+0

実際の問題コードの[mcve]を入力してください。 – Barry

答えて

4

C++ではエイリアスを複数回使用して宣言することは合法ですか?

はい、合法です。

using ... = ...;構文でエイリアス宣言typedefを宣言する手の込んだ方法です。したがって、エイリアスが異なるタイプであると宣言しない限り、問題なく繰り返し使用できます。

+0

名前空間スコープでのみ使用する限り、それは大丈夫でしょうか? –

関連する問題