This error happens when using macro and template. GCC Version: gcc version 12.3.0 (Ubuntu 12.3.0-1ubuntu1~22.04) OS: ubuntu 22.04 (x64) Compile Command: g++-12 ./testmacro.cc --std=c++20
In fact, this error exisits from g++11 to g++13. I also test it on clang and msvc, but it cannot be reproduced. short reproduction: #include <mutex> #define DECLARE_SINGLETON(classname_type) \ public: \ classname_type(); template <class MessageT> class ReceiverManager { public: ~ReceiverManager() { } private: MessageT receiver_map_; DECLARE_SINGLETON(ReceiverManager<MessageT>) }; template <typename MessageT> ReceiverManager<MessageT>::ReceiverManager(){} int main() { auto m = ReceiverManager<int>(); return 0; } compile it and report error: ./testmacro.cc:5:24: error: expected unqualified-id before ‘)’ token 5 | classname_type(); | ^ ./testmacro.cc:15:9: note: in expansion of macro ‘DECLARE_SINGLETON’ 15 | DECLARE_SINGLETON(ReceiverManager<MessageT>) | ^~~~~~~~~~~~~~~~~ ./testmacro.cc:19:1: error: no declaration matches ‘ReceiverManager<MessageT>::ReceiverManager()’ 19 | ReceiverManager<MessageT>::ReceiverManager(){} | ^~~~~~~~~~~~~~~~~~~~~~~~~ ./testmacro.cc:19:1: note: no functions named ‘ReceiverManager<MessageT>::ReceiverManager()’ ./testmacro.cc:8:7: note: ‘class ReceiverManager<MessageT>’ defined here 8 | class ReceiverManager | ^~~~~~~~~~~~~~~
testmacro.cc
Description: testmacro.cc