【发布时间】:2019-04-24 22:12:29
【问题描述】:
只是好奇:在 C++17 及更高版本中,我们可以为非类型模板参数使用 auto 占位符:
template<typename A, auto B>
class C {
public:
A foo() { return B; }
};
但是我们可以传递模板类型参数A而不是auto吗?
example.cpp
template<typename A, A B>
class C {
public:
A foo() { return B; }
};
int main()
{
C<int, 5> c;
std::cout << c.foo() << std::endl;
return 0;
}
在实践中我们可以,并且使用 -std=c++11 可以做到这一点。
$ g++ -std=c++11 example.cpp
$ ./a.out
5
但是标准呢?我没有找到任何明确的规则。 谢谢!
【问题讨论】:
-
我认为这是可能的,除了字符串文字。 See this
-
我已对您的问题进行了编辑,以包含语言律师标签。这应该会吸引您正在寻找的人群(即对标准的引用)。
标签: c++ c++11 templates language-lawyer c++17