次のソース コードを 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++ 標準の適切なポイントを教えてください。