https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78609
Bug ID: 78609 Summary: invalid member's visibility detection in constexpr Product: gcc Version: 6.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: bobk-off at yandex dot ru Target Milestone: --- All known for me version of gcc failed to compile following code with error " error: 'char A::data [28]' is private". clang compiles ok. Looks like compiler incorrectly interprets members visibility. #include <cstddef> struct A { private: char data[28]; public: constexpr const char * c_str() const { return data; } template<size_t N> constexpr A(char const (&str)[N]) : data() { for (size_t i=0;i<N;i++) data[i] = str[i]; }; constexpr A() : data() {}; }; template<size_t I> struct B { static const constexpr A name = A("Some text"); static const constexpr char * value = name.c_str(); }; template<size_t I> const constexpr A B<I>::name; int main() { volatile char d; const char * c = B<0>::value; while (*c!=0) d = *c++; }