https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88979
--- Comment #2 from 19Sebastian95 at gmx dot de --- I'm sorry if I'm misinterpreting this, but the program I wrote does compile with gcc 9.0, as the "error" part is commented out, so I'll just write what to do to get the descriped error: If my constructor is: A(typename T::type a) : mA{a} {} it is working, but if I remove the typename it'll give me The "error: expected ')' before 'a'" error. (As far as I know it should detect that it is only a missing typename, so for versions before c++20 it should be "error: need 'typename' [...]" and for c++20 it shouldn't be an error). So right now this won't compile: A(T::type a) : mA{a} {} But if I'd define the constructor out-of-line it won't give me an error: template<typename T> A<T>::A(T::type a) : mA{a} {} As GCC is detecting that there can only be a type at this position, which it doesn't with the "header-only"-version. I hope this will help.