[cfe-users] variable template within class produces non-static data member cannot be constexpr

Larry Evans cppljevans at suddenlink.net
Sat Nov 15 06:33:12 PST 2014

On 11/15/2014 06:59 AM, Gabriel Dos Reis wrote:
> On Fri, Nov 14, 2014 at 4:23 AM, Larry Evans <cppljevans at suddenlink.net>
> wrote:
>> On 11/14/2014 12:48 AM, David Blaikie wrote:
>>> My guess is that the proposal was written assuming a certain
>> implementation
>>> of constexpr that never panned out.
>>> It looks like both GCC and Clang expect constexpr member variables to be
>>> explicitly marked static:
>>> const.cpp:5:19: error: non-static data member 'f' declared 'constexpr'
>>>    constexpr foo f{};
>>>                    ^
>>> (is GCC 4.9's diagnostic - for a simple non-template constexpr member
>> variable)
>> That's sad because, as n3651 says on pp. 2-3:
>>   The main problems with “static data member” are:
>>   • they require “duplicate” declarations: once inside the class
>>     template, once outside the class template to provide the “real”
>>     definition in case the constants is odr-used.
> then don't put it in a class.

But then I don't understand why the problem was mentioned in n3651 on
pp. 2-3.  I thought one of the reasons for the proposal was to free
programmers from the need for "duplicate" declarations; however, the

  don't put it in a class

seems to indicate that the problem can be avoided simply by not
creating the problem.  IOW, the "duplicate" declaration in the
archetypical example on p. 2, the numeric_limits example, can be
avoided by not putting it in a template class (or struct in this

In that case, I don't understand the rationale for proposal.

I must be missing something :(



More information about the cfe-users mailing list