constexpr和bizzare错误

时间:2012-03-07 18:46:52

标签: c++ c++11 constexpr

我有:

constexpr bool is_concurrency_selected()const
    {
        return ConcurrentGBx->isChecked();//GBx is a groupbox with checkbox
    }

我收到了错误:

C:\...\Options_Dialog.hpp:129: error: enclosing class of 'bool Options_Dialog::is_concurrency_selected() const' is not a literal type

对于为什么有任何想法?

1 个答案:

答案 0 :(得分:6)

这意味着您的类不是文字类型...此程序无效,因为Options不是文字类类型。但Checker是文字类型。

struct Checker {
  constexpr bool isChecked() {
    return false;
  }
};

struct Options {
  Options(Checker *ConcurrentGBx)
    :ConcurrentGBx(ConcurrentGBx)
  { }

  constexpr bool is_concurrency_selected()const
  {
      //GBx is a groupbox with checkbox
      return ConcurrentGBx->isChecked();
  }

  Checker *ConcurrentGBx;
};

int main() {
  static Checker c;
  constexpr Options o(&c);
  constexpr bool x = o.is_concurrency_selected();
}

Clang打印

test.cpp:12:18: error: non-literal type 'Options' cannot have constexpr members
    constexpr bool is_concurrency_selected()const
                   ^
test.cpp:7:8: note: 'Options' is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors
    struct Options {

如果您修复此问题并生成Options构造函数constexpr,我的示例代码段就会编译。类似的事情可能适用于您的代码。

您似乎不明白constexpr的含义。我建议你读一本关于它的书(如果这本书已经存在,无论如何)。