我尝试创建无法与原始别名区分开的模板别名。
因此,我创建特征以检查2个模板(非类型)是否相等:
template <template <class...> class C1,
template <class...> class C2>
struct is_same_template : std::false_type {};
template <template <class...> class C1>
struct is_same_template<C1, C1> : std::true_type {};
Run Code Online (Sandbox Code Playgroud)
现在测试一下:
// Expected alias
template <typename ... Ts> using V_Ts = std::vector<Ts...>; // Variadic
// Fallback alias
template <typename T, typename A> using V = std::vector<T, A>; // Exact count
static_assert(!is_same_template<std::vector, V_Ts>::value); // Alias rejected by gcc/clang
static_assert( is_same_template<std::vector, V>::value); // Alias accepted only for gcc
Run Code Online (Sandbox Code Playgroud)
是否可以创建“ true”别名?哪个编译器是正确的?