https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80507
Bug ID: 80507
Summary: [C++17] static variable definition not emitted with
-std=c++1z when defined as constexpr
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: arnaud02 at users dot sourceforge.net
Target Milestone: ---
>g++ --version
>g++ (GCC) 7.0.1 20170420 (prerelease)
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
>cat gcc7.cpp
>struct CLS1 {
int m_index;
constexpr CLS1(int index) : m_index(index) {}
};
struct CLS2 {
static const CLS1 s_IXXX;
};
constexpr_var_decld_const CLS1 CLS2::s_IXXX {-1};
># works fine in C++14 with const
>rm gcc7.o; g++ -std=c++14 -Dconstexpr_var_decld_const=const -c gcc7.cpp; nm -C
>gcc7.o
0000000000000000 R CLS2::s_IXXX
># works fine in C++14 with constexpr
>rm gcc7.o; g++ -std=c++14 -Dconstexpr_var_decld_const=constexpr -c gcc7.cpp;
>nm -C gcc7.o
0000000000000000 R CLS2::s_IXXX
># works fine in C++17 with const
>rm gcc7.o; g++ -std=c++1z -Dconstexpr_var_decld_const=const -c gcc7.cpp; nm -C
>gcc7.o
0000000000000000 R CLS2::s_IXXX
># does not work in C++17 with constexpr (static object in not created)
>rm gcc7.o; g++ -std=c++1z -Dconstexpr_var_decld_const=constexpr -c gcc7.cpp;
>nm -C gcc7.o
Using constexpr for variables forward declared as const has been handled by gcc
since gcc 4.9 (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59123). This does
not work reliably with "-std=c++1z". It was accepted by gcc 6.2.
Could you address it please?