【发布时间】:2016-05-06 14:46:48
【问题描述】:
我正在尝试为Substitution Fail Is Not An Error(SFINAE) 使用几个模板化函数。我可以这样做:
template<typename R, typename S = decltype(declval<R>().test())> static true_type Test(R*);
template<typename R> static false_type Test(...);
但我不明白这个论点是如何使这个 SNFIAE 工作的。似乎我应该能够删除参数,并且模板选择的工作方式完全相同:
template<typename R, typename S = decltype(declval<R>().test())> static true_type Test();
template<typename R> static false_type Test();
但它没有,我明白了:
重载 'Test()' 的调用不明确
这些论点使 SFINAE 发挥作用的原因是什么?
【问题讨论】:
标签: c++ function parameters arguments sfinae