remove stray 'typename' before non-qualified names

'typename' disambiguates a qualified dependent name, telling the
compiler that something like T::iterator names a type rather than a
value. Before a plain identifier there is nothing to disambiguate: P1
is already a type, and so is PopupIndex.

The grammar wants a qualified name after the keyword, so clang reports
"expected a qualified name after 'typename'", drops the keyword and
carries on -- 15175 times, since the offending declarations sit in
widely included headers. MSVC accepts them without a word.

Semantics do not change. Both compilers already ignored the keyword,
so the partial specialisations matched before this and match after it.

The diagnostic belongs to no -W group and therefore cannot be switched
off with -Wno-, which makes deleting the tokens the only way to quiet
it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Marco Antonio J. Costa
2026-07-27 13:05:23 -03:00
committed by majcosta
co-authored by Claude Opus 5
parent b6c79dbead
commit fc1c1dfe77
3 changed files with 9 additions and 9 deletions
+3 -3
View File
@@ -42,7 +42,7 @@ private :
};
template<typename T> typename T& Singleton<T>::Instance() {
template<typename T> T& Singleton<T>::Instance() {
if (Singleton::instance_ == 0) {
Singleton::instance_ = CreateInstance();
ScheduleForDestruction(Singleton::Destroy);
@@ -59,7 +59,7 @@ void Singleton<T>::Destroy() {
}
template<typename T>
inline typename T* Singleton<T>::CreateInstance() {
inline T* Singleton<T>::CreateInstance() {
return new T();
}
@@ -74,6 +74,6 @@ inline void Singleton<T>::DestroyInstance(T* p) {
}
template<typename T>
typename T* Singleton<T>::instance_ = 0;
T* Singleton<T>::instance_ = 0;
#endif