https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65969
--- Comment #5 from jim x <xmh970252187 at gmail dot com> --- The last two cases seem to be not a bug to me. The standard says(cite the c++20 standard) > If a using-declarator uses the keyword typename and specifies a dependent > name ([temp.dep]), the name introduced by the using-declaration is treated as > a typedef-name. In these cases, regardless of `g`, `f` or even `var`; they are not **dependent name**, hence the keyword `typename` has no effect on them(i.e., they were not considered as typedef-name). they didn't violate any rule.