防止编码器错误 - 忘记在“std::enable_if<>::type”(SFINAE)中添加“::type”

java情人

这是 SFINAE 的正确代码(演示):-

template<bool b> class C {
    public: template<bool b2=b> typename std::enable_if<b2,void>::type f(){
        cout<<"no!!";
    }
};
int main() {
    //C<false> c1; c1.f(); <-- not compilable (it is good)
    C<true> c2; c2.f();
    return 0;
}

我对 C++ 很陌生,但仍然不习惯它。
结果,我经常忘记添加::type:-

    public: template<bool b2=b> std::enable_if<b2,void> f(){
        cout<<"no!!";
    }

不幸的是,即使它是错误的,它也可以编译为<false>demo)。

在我糟糕的一天,我什至走得很远:-

    public: std::enable_if<b,void> f(){
        cout<<"no!!";
    }

它仍然可以编译为<false>演示)。

我知道它是如何/为什么是错误的,但我在实践中经常犯这样的错误。

问题:除了编译器警告之外,在这种情况下如何防止编码器错误?

用户743382

std::enable_if_t通过不再要求程序员显式引用嵌套类型,C++14 引入了不允许出现这种错误。您可以决定enable_if完全不再使用自己的代码,甚至可能将其列入您自己的源代码中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

表达式 std::enable_if 中的 type* 是什么

来自分类Dev

std :: enable_if <>的错误

来自分类Dev

SFINAE:std :: enable_if作为函数参数

来自分类Dev

C ++ enable_if模板类方法(如果它是std :: vector <std :: vector <Type >>)

来自分类Dev

在模板函数返回类型上使用std :: enable_if以利用SFINAE-编译错误

来自分类Dev

在模板函数返回类型上使用std :: enable_if以利用SFINAE-编译错误

来自分类Dev

尝试使用SFINAE(std :: enable_if)和模板特化时出现编译错误

来自分类Dev

模板参数推导和SFINAE-使用std :: enable_if

来自分类Dev

SFINAE使用std :: enable_if:类型参数与非类型参数

来自分类Dev

模板参数推导和SFINAE-使用std :: enable_if

来自分类常见问题

错误:名称空间“ std”中没有名为“ enable_if_t”的模板;你是说'enable_if'吗?

来自分类Dev

错误:名称空间“ std”中没有名为“ enable_if_t”的模板;你是说'enable_if'吗?

来自分类Dev

使用std :: enable_if

来自分类Dev

使用`std :: enable_if`转发包装器失败

来自分类Dev

std :: enable_if如何工作?

来自分类Dev

C ++ std :: enable_if ....否则?

来自分类Dev

具有`std :: enable_if <std :: is_compound <double> :: value>`的意外SFINAE行为

来自分类Dev

使用enable_if防止声明?

来自分类Dev

当type包含具有给定名称和类型的静态变量时,enable_if函数

来自分类Dev

`std :: enable_if`通过模板参数的SFINAE自定义类型吗?

来自分类Dev

SFINAE enable_if显式构造函数

来自分类Dev

Visual Studio 2015上带有std :: enable_if的错误C1001

来自分类Dev

使用std :: enable_if限制派生类的模板参数时发生编译错误

来自分类Dev

这些是std :: enable_if的预期错误,还是我使用不正确?

来自分类Dev

使用 std::enable_if 重载函数以避免模板替换错误

来自分类Dev

std :: conditional vs std :: enable_if

来自分类Dev

std :: enable_if在Visual Studio 2013中无法按预期工作

来自分类Dev

std :: enable_if如果无法在Visual Studio 2013中按预期方式工作

来自分类Dev

在std :: enable_if中使用sizeof ...

Related 相关文章

  1. 1

    表达式 std::enable_if 中的 type* 是什么

  2. 2

    std :: enable_if <>的错误

  3. 3

    SFINAE:std :: enable_if作为函数参数

  4. 4

    C ++ enable_if模板类方法(如果它是std :: vector <std :: vector <Type >>)

  5. 5

    在模板函数返回类型上使用std :: enable_if以利用SFINAE-编译错误

  6. 6

    在模板函数返回类型上使用std :: enable_if以利用SFINAE-编译错误

  7. 7

    尝试使用SFINAE(std :: enable_if)和模板特化时出现编译错误

  8. 8

    模板参数推导和SFINAE-使用std :: enable_if

  9. 9

    SFINAE使用std :: enable_if:类型参数与非类型参数

  10. 10

    模板参数推导和SFINAE-使用std :: enable_if

  11. 11

    错误:名称空间“ std”中没有名为“ enable_if_t”的模板;你是说'enable_if'吗?

  12. 12

    错误:名称空间“ std”中没有名为“ enable_if_t”的模板;你是说'enable_if'吗?

  13. 13

    使用std :: enable_if

  14. 14

    使用`std :: enable_if`转发包装器失败

  15. 15

    std :: enable_if如何工作?

  16. 16

    C ++ std :: enable_if ....否则?

  17. 17

    具有`std :: enable_if <std :: is_compound <double> :: value>`的意外SFINAE行为

  18. 18

    使用enable_if防止声明?

  19. 19

    当type包含具有给定名称和类型的静态变量时,enable_if函数

  20. 20

    `std :: enable_if`通过模板参数的SFINAE自定义类型吗?

  21. 21

    SFINAE enable_if显式构造函数

  22. 22

    Visual Studio 2015上带有std :: enable_if的错误C1001

  23. 23

    使用std :: enable_if限制派生类的模板参数时发生编译错误

  24. 24

    这些是std :: enable_if的预期错误,还是我使用不正确?

  25. 25

    使用 std::enable_if 重载函数以避免模板替换错误

  26. 26

    std :: conditional vs std :: enable_if

  27. 27

    std :: enable_if在Visual Studio 2013中无法按预期工作

  28. 28

    std :: enable_if如果无法在Visual Studio 2013中按预期方式工作

  29. 29

    在std :: enable_if中使用sizeof ...

热门标签

归档