Takip koduna sahibim:
template <typename TC>
class C
{
struct S
{
template <typename TS>
void fun() const
{}
};
void f(const S& s)
{
s.fun<int>();
}
};
// Dummy main function
int main()
{
return 0;
}
Bunu hem gcc 9.2 hem de clang (9.0) ile oluştururken, template
anahtar kelimeyi çağırmak için gerekli olması nedeniyle bir derleme hatası alıyorum fun
. Clang şovları:
error: use 'template' keyword to treat 'fun' as a dependent template name
s.fun<int>();
^
template
Derleyicinin fun
bağlam bağlamında neden bağımlı bir isim olduğunu düşündüğünü anlamıyorum f
, çünkü f
bir şablon değil. C
Bir şablon yerine normal bir sınıf olarak değiştirirseniz , hata gider; Orada beri ilk etapta bir hata olması ne neden Ancak görmüyorum S
ne de f
bağlıdır TC
.
İşin garibi, MSVC 19.22 bunu gayet iyi derliyor.
Not
"Dupe " ve "typename" anahtar kelimelerini nereye ve neden koymalıyım? lütfen S
bunun gerçekten bağımlı bir isim olsa bile , bağlamında f
mevcut örneğe üye olmaları olmasa bile bağımlı olmayacağı özel bir durum olduğunu düşünün .