:デフォルトのテンプレートパラメータをデフォルト以外のものの前に置くことはできますか?
struct X {};
template <class T = X, typename U>
void f(const U& m) {
}
int main() {
f<>(0);
}
しかし、この1つはない:
struct X {};
template <class T = X, typename U>
void f(const U& m) {
auto g = []() {};
}
int main() {
f<>(0);
}
のgcc-4.7.1が文句:
c.cpp: In function 'void f(const U&)':
c.cpp:5:15: error: no default argument for 'U'
私の質問です:デフォルト以外のパラメータの前にデフォルトのパラメータを置いて、関数テンプレートに入れていますか?はいの場合、なぜ2番目のファイルはコンパイルされませんか?いいえ、最初のものはなぜコンパイルされますか?この構文についてC++ 11標準はどのように言いますか?
http://stackoverflow.com/questions/2447458/default-template-arguments-for-function-templates – Andrew
@Andrew、投稿した投稿は長すぎます。あなたは、デフォルト以外のパラメータの前にデフォルトのパラメータを置くのが正しいかどうかについて答えていますか? –
@cando:スタンダードには、*関数テンプレートのデフォルトテンプレート引数をどこにでも置くことは禁じられています。 *クラス*テンプレートのみが制限されています。 –