Bazen bazen değil çalışır: Yukarıdaki örnekte etrafında kesmek için bir yolBir derleyici bir şablon parametresi çıktığında?
template <class T>
void f(T t) {}
template <class T>
class MyClass {
public:
MyClass(T t) {}
};
void test() {
f<int>(5);
MyClass<int> mc(5);
f(5);
MyClass mc(5); // this doesn't work
}
var mı? Yani Derleyici, şablon parametresini yapıcı parametresiyle karşılaştırmaya zorlar.
Gelecekte bu düzeltilecek mi, yoksa iyi bir neden mi var?
Derleyici şablon parametresini önerdiğinde genel kural nedir?
+1, kapsamlı. Minor nit: "Parametre tipi bağımlı olduğunda" "bir parametre tipi bağımlı olduğunda" değiştirmeyi öneririm. –
void f (typename T :: const_iterator t); << burada, T indirgenemez bir bağlamda görünür. Bir vektör :: const_iterator ile çağrılırken bile, örneğin, T için vektörü çıkartamayacaktır, bunun nedeni :: const_iterator öğesinin T'ye bağlı olması, ancak T'nin yeniden anlamı :: const_iterator. bu yüzden boost :: implicit_cast şöyle kodlanır: template T implicit_cast (typename identity :: type t) {return t; } yine burada, düşünülemez bir bağlam var. –
Standart-ref 14.8.2.4/4'tür (en son C++ 1x taslağı 14.9.2.5/5'te yer alır - mevcut standarttaki ifadelerin eksikliklerini de giderir). :) alkış –