https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82461

            Bug ID: 82461
           Summary: Temporary required for brace-initializing
                    (non-literal-type) member variable
           Product: gcc
           Version: 7.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: tvb377 at gmx dot de
  Target Milestone: ---

class A {
private:
public:
  constexpr A() {}
  ~A() {}
};

class B {
private:
  A  a;
public:
  constexpr B() : a{} {}
// works also with g++ -std=c++17:
// constexpr B() : a() {}

  ~B() {}
};

When compiling this with -std=c++17 g++ reports:

error: temporary of non-literal type ‘A’ in a constant expression
note:   ‘A’ has a non-trivial destructor

With -std=c++11 and 14 g++ accepts this code as do clang 5.0 and MS cl 19.11

Reply via email to