std ::有条件的SFINAE

时间:2017-04-06 09:17:40

标签: c++ c++11 template-meta-programming sfinae enable-if

是否可以创建一种std :: enable_if_and_else,如std :: conditional,但没有未定义的类的编译时错误。

以下是一个例子:

static constexpr bool myExpr = true;

struct A {};
struct B;

struct C :
    std::conditional<myExpr,
      A,
      B>::type
    {};  // Compilation error: B is declared but not defined

struct D :
    enable_if_else<myExpr,
      A,
      B>::type
    {};  // It works

由于

1 个答案:

答案 0 :(得分:4)

  

是否可以创建一种std :: enable_if_and_else,如std :: conditional,但没有未定义的类的编译时错误。

std::conditional<true, A, B>::type如果B不完整,则不应该出现任何错误,因为您没有以要求完整的方式使用B。< / p>

所以std::conditional已经是您正在寻找的。