10

次のソース コードを gcc でコンパイルすると、エラーや警告は発生しません。

template< typename T = int > T func( );
template< typename T = int > T func( );

同じソース コードを clang++ でコンパイルすると、次のエラーが発生しました。

redeftempparam.cc:2:24: error: template parameter redefines default argument
template< typename T = int > T func( );
                       ^
redeftempparam.cc:1:24: note: previous default template argument defined here
template< typename T = int > T func( );
                       ^
1 error generated.

コンパイルするコマンド

[clang++|g++] -Wall -Werror -std=c++11 redeftempparam.cc

(バージョン情報: gcc 4.7.2、clang バージョン 3.3 (trunk 171722))

私の質問:

このタイプの再定義は許されますか? そうでない場合: C++ 標準の適切なポイントを教えてください。

4

1 に答える 1

15

§14.1.12:

テンプレートパラメータには、同じスコープ内の2つの異なる宣言によってデフォルトの引数が与えられてはなりません。

[例:

template<class T = int> class X;
template<class T = int> class X { /∗... ∗/ }; // error

—終了例]

于 2013-01-07T14:04:15.280 に答える