以下の要素の参照は曖昧か
#include <type_traits> namespace test { template<int... args> struct test { static constexpr auto value = 1; }; } int main() { using namespace test; static_assert(test<1>::value == 1, ""); // test<1>::valueはambiguous? }
あるnamespace内に同名のtemplate structが存在しており、その中に静的なメンバが存在しています。
using namespaceを行った上で、そのnamespace内のstruct内の静的メンバをtemplate arguments付きで参照します。
状況的にはnamespaceがtemplate argumentsを取ることは無いので、判別可能だと思いますがどうでしょうか。
clangでは参照出来ます。
gccでは error: reference to 'test' is ambiguous となります。
規格上どうなっているのか調べているのですが、今のところこのようなケースに関してどうなるか確定させる要素を見つけられず、どのような挙動が正しいのか分かっていません。
規格から挙動が確定出来ればどちらかのコンパイラのバグということになります。
もしかしたらこのようなケースは考慮されておらず、規格においても言及されていないのかもしれません。
個人的には、参照出来る方がありがたいのですが。
その場合は規格に何か提案したり出来るのでしょうかね。
規格に詳しい人が居れば教えていただけると助かります。