我有一个简单的模板类A。如果满足某些要求,我想启用一项功能。
requires子句我尝试的第一个解决方案如下:
template <class T>
class A
{
public:
void a(void) requires (same_as<T, int>)
{
std::cout << "a" << std::endl;
};
};
Run Code Online (Sandbox Code Playgroud)
这效果非常好。我可以打电话,A<int>().a()但不能A<char>().a();。此外,IntelliSense 可以正确识别 Visual Studio 中的使用错误。
我尝试将函数定义移到类之外,但在 Visual Studio 中出现 C2511 编译器错误。在海湾合作委员会,它工作得很好。
template <class T>
class A
{
public:
void a(void) requires (same_as<T, int>);
};
template <class T>
void A<T>::a(void)
requires (same_as<T, int>)
{
std::cout << "a" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
您认为我的代码不正确还是 Visual Studio 编译器错误/功能不完整?
static_assert该解决方案在某些情况下有效,但如果您尝试显式模板实例化(例如template …