【发布时间】:2020-01-30 15:33:32
【问题描述】:
这个程序
#include <iostream>
template <int I>
struct A
{
A() { std::cout << "A<I>()\n"; }
};
template <int I>
struct A<I + 5>
{
A() { std::cout << "A<I + 5>()\n"; }
};
int main()
{
return 0;
}
既不是由 gcc HEAD 10.0.0 20190 也不是由 clang HEAD 10.0.0 编译的。
例如 gcc 编译器出现错误
prog.cc:10:8: error: template argument '(I + 5)' involves template parameter(s)
10 | struct A<I + 5>
| ^~~~~~~~
类模板偏特化有错吗?
【问题讨论】:
-
我没有得到你期望的结果......你能详细说明你想要完成的事情以及为什么这个(在我看来 100% 合理的)错误让你感到困惑吗?
-
@MaxLanghof 为什么是错误的类模板偏特化?
-
您可能只专注于
A<numeric_limits<int>::min()>, ..,A<numeric_limits<int>::min() + 4>。 :)
标签: c++ class templates c++17 partial-specialization