https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81853
Bug ID: 81853 Summary: [C++14] "using namespace" is not a constant expression in function-like macro Product: gcc Version: 7.1.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: t.poechtrager at gmail dot com Target Milestone: --- $ g++ --version g++ (GCC) 7.1.1 20170630 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 test.cpp namespace test { constexpr int test_fun() { return 42; } } #define test_macro() \ ({ \ using namespace test; \ test_fun(); \ }) int main() { constexpr int test_var = test_macro(); return test_var; } --------------------------------------------------------------------------- $ g++ test.cpp test.cpp: In function ‘int main()’: test.cpp:8:19: error: statement is not a constant expression using namespace test; \ ^ test.cpp:14:30: note: in expansion of macro ‘test_macro’ constexpr int test_var = test_macro(); ^~~~~~~~~~ --------------------------------------------------------------------------- Clang accepts this since 3.4: $ clang++ test.cpp -std=c++14 && ./a.out ; echo $? 42