SFINAE用于演员

时间:2017-07-18 08:19:17

标签: c++ gcc sfinae enable-if typecast-operator

我有一个类,它包装一个枚举并为它提供字符串转换。现在我介绍了模板参数'fastStringConvert',它控制了使用SFINAE进行转换的方式(在这里找到:how can I use std::enable_if in a conversion operator?)。代码在MSVC下编译,但在GCC和Clang下失败。

  tooltip: {
    formatter: function() {
      return '<b>' + this.point.name + '</b><br> ' + 'Percentage: ' + this.percentage.toFixed(1) + ' %<br>' + 'Amount: ' + this.y;
    }
  },

可能是什么问题以及我该如何更改代码?

以下或此处代码的相关部分:http://rextester.com/SYC74124

error: no type named ‘type’ in ‘struct std::enable_if<false, void>’

1 个答案:

答案 0 :(得分:2)

您必须使用方法中的模板参数,否则您会遇到硬错误,例如:

template <
    typename SFINAEPostponer = EnumType,
    bool Cond = !fastStringConvert,
    typename = typename std::enable_if<Cond, void>::type
>
explicit operator const std::string() const

BTW,最好使用enable_if作为类型而不是默认值(允许禁用部分):

template <
    typename SFINAEPostponer = EnumType,
    bool Cond = !fastStringConvert,
    typename std::enable_if<Cond, void>::type* = nullptr
>
explicit operator const std::string() const