[Bug c++/84788] New: Parenthesis changes a constant to non-constant
tuliom at linux dot vnet.ibm.com
gcc-bugzilla@gcc.gnu.org
Fri Mar 9 18:04:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84788
Bug ID: 84788
Summary: Parenthesis changes a constant to non-constant
Product: gcc
Version: 8.0.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: tuliom at linux dot vnet.ibm.com
Target Milestone: ---
Reproduced with GCC 8.0.1 rev. 258059:
$ cat test-cxx.cpp
template <int kKeybits>
class PackedCache {
public:
static const int kValuebits = 7;
static const int kValueMask = 1 << ((kValuebits)-1);
};
$ g++ -c test-cxx.cpp
test-cxx.cpp:5:53: error: non-constant in-class initialization invalid for
static member ‘PackedCache<kKeybits>::kValueMask’
static const int kValueMask = 1 << ((kValuebits)-1);
^
test-cxx.cpp:5:53: note: (an out of class initialization is required)
If the parenthesis around kValuebits is removed, the error disappears, i.e.:
static const int kValueMask = 1 << (kValuebits-1);
I can't reproduce this error with GCC 7.
This file used to build with rev. 253122.
I can build the file when using -std=gnu++11.
More information about the Gcc-bugs
mailing list