【发布时间】:2017-09-22 23:08:10
【问题描述】:
#include <type_traits>
template<template<class...> class T, class... U>
struct is_specialization_of : std::false_type{};
template<template<class...> class T, class... U>
struct is_specialization_of<T, T<U...>> : std::true_type{};
template<class T, class U = int>
struct test{};
// (1) ok
static_assert(is_specialization_of<test, test<int>>::value, "1");
template<class T>
using alias = test<T>;
// (2) fails
static_assert(is_specialization_of<alias, alias<int>>::value, "2");
int main()
{
}
为什么 (2),即使用别名模板的 static_assert 会失败?
(2)中的模板参数推导过程与(1)中的有什么不同?
【问题讨论】:
标签: c++ c++11 templates language-lawyer