次のスニペットを打ち鳴らすによって拒否されていますclang++ -std=c++1z -c
で例外仕様およびテンプレート
template <typename T> void foo() noexcept {}
template <typename T> void bar() throw() {}
template void foo<int>();
template void bar<int>();
私が手:
compat.ii:3:15: error: explicit instantiation of 'foo' does not refer to a function template, variable template, member function, member class, or static data member
template void foo<int>();
^
compat.ii:1:28: note: candidate template ignored: could not match 'void() noexcept' against 'void()'
template <typename T> void foo() noexcept {}
^
compat.ii:4:15: error: explicit instantiation of 'bar' does not refer to a function template, variable template, member function, member class, or static data member
template void bar<int>();
^
compat.ii:2:28: note: candidate template ignored: could not match 'void() throw()' against 'void()'
template <typename T> void bar() throw() {}
^
2 errors generated.
gccのトランクは-std=c++1z
でコードを受け付けます。 正しいコンパイラは?
'void foo'と 'throw()'に 'noexcept'を' void bar 'に追加するとClangが動作すると思いますか? –
ildjarn
私のトランクgccはそのようなコードを拒否します。ワンドボックスもそうです。 – krzaq