考虑如何使用decltype()尾随返回类型中的逗号表达式来检查是否可以应用函数:
template <class A>
auto f(A a) -> decltype(check_if_possible(a), return_type(a))
Run Code Online (Sandbox Code Playgroud)
如何否定逗号前的部分以排除check_if_possible(a)已定义的情况?
上下文:
f()是不同的重载函数A。我想解决两个实现之间的歧义重载。其中一个使用check_if_possible(a),另一个在不能应用的情况下工作a。
编辑:std::enable_if也欢迎使用和相关的东西,但我想避免额外的辅助功能/模板,因为有几个功能类似于f()具有不同启用条件的功能。如果这是不可能的,那么这也是一个答案;)