Вот пример cppreference об использовании псевдонима. Этот пример не работает, потому что int
не имеет члена foo
:
template<typename...> using void_t = void;
template<typename T> void_t<typename T::foo> f();
f<int>(); // error, int does not have a nested type foo
Это ясно, но когда я попытался поместить часть void_t
в список параметров, она неожиданно скомпилирована:
template<typename...> using void_t = void;
template<typename T> void f(void_t<typename T::foo>);
f<int>();
Он компилируется на clang, но не в gcc. Это ошибка?