enable_if用于没有返回类型的函数

时间:2015-08-26 19:43:53

标签: c++ c++11 enable-if

我最近遇到了一个有趣的enable_if用法版本,有条件地启用了一个稍微提高可读性的函数,因为函数的返回类型不是enable_if的一部分(参见cleaner_usage):

#include <type_traits>

using maybe_integral = int /* = or float -- then won't compile */;
using return_type = int;

typename std::enable_if<std::is_integral<maybe_integral>::value, return_type>::type
traditional_usage()
{
    return 1;
}

template<typename std::enable_if<std::is_integral<maybe_integral>::value, int>::type = 0>
return_type cleaner_usage()
{
    return 2;
}

int main()
{
    return traditional_usage() + cleaner_usage();
}

对于失败案例,机制是明确的(没有type成员)。

但在其他情况下它究竟是如何运作的呢?因为将int typedef字段替换为具有意外分配的模板类型参数。

0 个答案:

没有答案