![]() |
1
3
当替换函数模板的模板参数失败时,SFINAE适用,而不是类模板的模板参数,该类模板的模板参数将有问题的(非模板)函数作为成员,在您的情况下就是这样。
修正后,你至少应该改变
最后,我创建了一个在g++4.5.0上正常工作并产生所需结果的示例
现在如果你把两个都拿走
表示替换失败
|
![]() |
2
0
很抱歉,作为一个回答,但评论似乎是为我散播。
这是有效的,因为它只出现在decltype中,在运行时并没有实际计算。另一个选择是
然后使用
作为一个旁白,我记得读到斯特劳斯特罗普设计语言是因为他不想用错误的工具来完成工作。C++不是元语言编程的错误语言吗? 虽然c++0x在很大程度上改进了一些东西,但这似乎不是重点。有没有像c++这样“接近金属”的语言可以提供更好的工具来编写在编译时生成代码的元代码? |
![]() |
yageek · json11库关于隐式构造函数的代码解释 7 年前 |
![]() |
Nami · C++箭头类型产生左值 8 年前 |
|
user4813927 · c++中的decltype()导致编译错误 8 年前 |
|
user4992621 · 模板参数推导失败时decltype成功? 9 年前 |
|
ThaPear · 将类成员声明为模板参数 10 年前 |
![]() |
Adrian Lis · 具有可变模板的给定成员函数指针的类型推导 11 年前 |
![]() |
JBL · 如何正确推断模板的返回类型? 11 年前 |