https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64852
Bug ID: 64852 Summary: C++ accepts invalid(?) constants only at -O0 Product: gcc Version: 5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: bernd.edlinger at hotmail dot de This program should probably be rejected, but actually it compiles correctly and without warning, the resulting code "works". Same behaviour with current trunk and 4.6.2 cat test.C #include <arpa/inet.h> #include <stdio.h> const short test = htons(10); int main() { printf("%x\n", test); } g++ -O0 test.C && ./a.out a00 g++ -O1 test.C In file included from /usr/include/x86_64-linux-gnu/bits/byteswap.h:35:0, from /usr/include/endian.h:60, from /usr/include/x86_64-linux-gnu/sys/types.h:216, from /usr/include/x86_64-linux-gnu/sys/uio.h:23, from /usr/include/x86_64-linux-gnu/sys/socket.h:26, from /usr/include/netinet/in.h:23, from /usr/include/arpa/inet.h:22, from test.C:1: test.C:4:20: error: statement-expressions are not allowed outside functions nor in template-argument lists const short test = htons(10); the same program is correctly rejected if compiled in C mode, but interestingly with a completely different message on -O0 and -O1