![]() |
1
3
当替换函数模板的模板参数失败时,SFINAE适用,而不是类模板的模板参数,该类模板的模板参数将有问题的(非模板)函数作为成员,在您的情况下就是这样。
修正后,你至少应该改变
最后,我创建了一个在g++4.5.0上正常工作并产生所需结果的示例
现在如果你把两个都拿走
表示替换失败
|
![]() |
2
0
很抱歉,作为一个回答,但评论似乎是为我散播。
这是有效的,因为它只出现在decltype中,在运行时并没有实际计算。另一个选择是
然后使用
作为一个旁白,我记得读到斯特劳斯特罗普设计语言是因为他不想用错误的工具来完成工作。C++不是元语言编程的错误语言吗? 虽然c++0x在很大程度上改进了一些东西,但这似乎不是重点。有没有像c++这样“接近金属”的语言可以提供更好的工具来编写在编译时生成代码的元代码? |