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

            Bug ID: 80630
           Summary: gcc fails to compile constexpr with -O0/-O1
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vsevolod.livinskij at frtk dot ru
  Target Milestone: ---

Created attachment 41318
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=41318&action=edit
Reproducer.

gcc fails to compile constexpr at -O0 and -O2 with -std=c++11 and -std=c++14.
Everything works fine with -std=c++17.

Reproducer:
>$ cat repr.cpp 
#include <iostream>
#include <utility>

template<typename T>
void foo() {
    std::cout << T::debug_typeid << std::endl;
    std::make_pair(T::debug_typeid, T::debug_typeid);
}

struct A {
    static constexpr uint32_t debug_typeid = 1;
}; 

int main () {
    foo<A>();
}

Error:
>$ g++ -std=c++11 repr.cpp -O0 ; ./a.out
/tmp/cckPqG1z.o: In function `void foo<A>()':
repr.cpp:(.text._Z3fooI1AEvv[_Z3fooI1AEvv]+0x21): undefined reference to
`A::debug_typeid'
repr.cpp:(.text._Z3fooI1AEvv[_Z3fooI1AEvv]+0x26): undefined reference to
`A::debug_typeid'
collect2: error: ld returned 1 exit status

GCC revision:247564

Reply via email to