【问题标题】:constexpr makes members invisibleconstexpr 使成员不可见
【发布时间】:2019-07-13 01:55:37
【问题描述】:

抱歉,标题不具描述性。

我在 C++14 代码库中有一个类,我们称之为HugeClassHugeClass 是 LiteralType,所以它至少有一个 constexpr ctor:

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

        // Over 9k LOC

        ...

        private:
        int member;
    };

一切都好。但不是。 clang-tidy plus -std=c++14 barks: 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) 中的一个错误吗?

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 2012-05-26
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    相关资源
    最近更新 更多