gpt4 book ai didi

c++ - 了解 SFINAE 示例

转载 作者:行者123 更新时间:2023-11-30 05:21:33 24 4
gpt4 key购买 nike

我很难理解 SFINAE。例如,我不明白为什么下面的代码不能编译:

#include <iostream>
using namespace std;

// first implementation
template< size_t M, std::enable_if<M==1,size_t>::type = 0>
int foo()
{
return 1;
}

// second implementation
template< size_t M, std::enable_if<M!=1,size_t>::type = 0>
float foo()
{
return 1.0f;
}

int main() {
std::cout << foo<1>() << std::endl;

return 0;
}

我预期会出现以下行为:foo<1>使用自 std::enable_if < M==1,size_t>::type = 0> 以来的第一个实现std::enable_if < M!=1,size_t>::type = 0> 时不会导致替换错误做。

有没有人看出我论证中的错误?

最佳答案

如评论中所述,您必须添加 typename之前std::enable_if因为::typedependent type :

template< size_t M, typename std::enable_if<M==1,size_t>::type = 0>
int foo()
{
return 1;
}

在 C++14 中,你可以使用 std::enable_if_t , 这是 std::enable_if<...>::type 的别名,并“嵌入”额外的 typename :

template< size_t M, std::enable_if_t<M==1,size_t> = 0>
int foo()
{
return 1;
}

关于c++ - 了解 SFINAE 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40040070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com