[Bug c++/58173] New: [C++11] Bad interaction between sizeof... and remainder (%) operators
lucdanton at free dot fr
gcc-bugzilla@gcc.gnu.org
Fri Aug 16 06:50:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58173
Bug ID: 58173
Summary: [C++11] Bad interaction between sizeof... and
remainder (%) operators
Product: gcc
Version: 4.8.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: lucdanton at free dot fr
$ g++-snapshot --version
g++-snapshot (GCC) 4.9.0 20130806 (experimental)
$ cat main.cpp
template<typename... T>
struct foo {
static constexpr auto N = sizeof...(T);
struct bar {
static_assert( N == 5, "" );
static_assert( (-1) % 5 == -1, "" );
static_assert( (-1) % N != -1, "" );
};
};
int main()
{
foo<int, int, int, int, int>::bar();
}
$ g++-snapshot -std=c++11 main.cpp
-------------------
That is, the compiler does not reject the program even though the three
assertions cannot all hold simultaneously. As far as I can tell factoring the
sizeof...(T) expression into N isn't necessary for the bug, and the use of the
remainder operator is.
This seems to happen with 4.8.1 as well.
More information about the Gcc-bugs
mailing list