关于c ++ 11:is_defined constexpr函数

is_defined constexpr function

我需要知道在指定noexcept说明符时是否定义了ndebug。我按照constexpr函数的思路思考:

1
2
3
4
5
6
7
8
9
constexpr inline bool is_defined() noexcept
{
  return false;
}

constexpr inline bool is_defined(int) noexcept
{
  return true;
}

然后像这样使用:

1
2
3
4
void f() noexcept(is_defined(NDEBUG))
{
  // blah, blah
}

标准库或语言是否已经为此提供了一个工具,这样我就不会重新发明轮子了?


是的,使用#ifdef??????? </P >

1
2
3
4
5
6
7
8
9
#ifdef  NDEBUG
using is_ndebug = std::true_type;
#else
using is_ndebug = std::false_type;
#endif

void f() noexcept(is_ndebug{}) {
  // blah, blah
}

无数的研究或其他类似的方式:(一constexpr函数回归boolstd::true_type(条件)。一种可变static一的两种类型。一类的特质,把这一枚举列表各种#define令牌equivalents(eNDEBUG等),这可以专门为每个这样的令牌,它有支持,和generates错误,如果有没有这样的支持。利用typedef去大学的using(如果你的编译器有flaky支持使用的,我在寻找你的msvc2013)。我担心,有可以做别人的。 </P >


如果你是只读的interested在NDEBUG,这是相当于一个额外的测试是否assert()evaluates它的argument或不。在这情况下,你可以使用: </P >

1
2
3
4
void f() noexcept(noexcept(assert((throw true,true))))
{
    // ...
}

这是,当然,不安necessarily改良:) </P >