constexpr使成员不可见

时间:2019-07-13 01:55:37

标签: c++ c++14 c++17 constexpr

抱歉,标题不明确。

我在C ++ 14代码库中有一个类,我们将其称为HugeClassHugeClass是LiteralType,因此至少具有一个constexpr ctor:

    class HugeClass {
        public:
        constexpr HugeClass() : member{0}
        {
        }

        // Over 9k LOC

        ...

        private:
        int member;
    };

一切都很好。但不是。 lang整洁的加-std=c++14吠声: member initializer 'member' does not name a non-static data member or base class

对于重新排序的字段不会发生这种情况:

    class HugeClass {
        private:
        int member;

        public:

        ...
    };

也不与-std=c++17一起使用。 删除constexpr很奇怪。

  • 我做错了什么?
  • 标准触及这个吗?
  • 这可能是clang(-tidy)中的错误吗?

1 个答案:

答案 0 :(得分:1)

C ++ 14§7.1.5(“ constexpr说明符”)列出了constexpr构造函数的一系列要求。它们都不与您的代码矛盾。相反,您可以在(4.9)下的本节中找到代码作为示例:

struct Length {
  constexpr explicit Length(int i = 0) : val(i) { }
private:
  int val;
};