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 #define DECLARE_SINGLETON(classname_type) \ public: \ classname_type(); template class ReceiverManager { public: ~ReceiverManager() { } private: MessageT receiver_map_; DECLARE_SINGLETON(ReceiverManager) }; template ReceiverManager::ReceiverManager(){} int main() { auto m = ReceiverManager(); 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) | ^~~~~~~~~~~~~~~~~ ./testmacro.cc:19:1: error: no declaration matches ¡®ReceiverManager::ReceiverManager()¡¯ 19 | ReceiverManager::ReceiverManager(){} | ^~~~~~~~~~~~~~~~~~~~~~~~~ ./testmacro.cc:19:1: note: no functions named ¡®ReceiverManager::ReceiverManager()¡¯ ./testmacro.cc:8:7: note: ¡®class ReceiverManager¡¯ defined here 8 | class ReceiverManager | ^~~~~~~~~~~~~~~