2011-12-20 8 views
6

次のC++コードは正しいですか?もしそうなら、これを言及している標準のパラグラフに誰かが指摘できますか?テンプレートで囲まれたスコープ内のtemplate-idの代わりにtemplate-nameを使用することができ、コンパイラーはテンプレート引数リストを自動的に追加するようです。対向するようクラステンプレート定義内のテンプレートIDの代わりにテンプレート名を使用

template<class Type> 
class Mana { 
public: 
    Mana(const Mana& m) {/*...*/} 
    Mana() {/*...*/} 
}; 

template<class Type> 
class Mana { 
public: 
    Mana(const Mana<Type>& m) {/*...*/} 
    Mana() {/*...*/} 
}; 

コードは、MS Visual StudioでG ++と同様でコンパイル。

+1

コードは正しいです。 'Mana'は' Mana 'に相当します。スタンダードからの引用のために、我々は待つ必要があります。 – iammilind

答えて

7

はいコードは正しいです。 (引用:§14.6.1[temp.local]/2

クラステンプレート特殊化又は部分特殊の範囲内で、注入クラス名タイプ - として使用 ありますに名前を付け、それはテンプレート引数<>で囲まれたクラス テンプレートの特殊化又は部分特殊の続いテンプレート名に相当する[例:

template<template<class> class T> class A { }; 
template<class T> class Y; 
template<> class Y<int> { 
    Y* p;  // meaning Y<int> 
    Y<char>* q; // meaning Y<char> 
    A<Y>* a;  // meaning A<::Y> 
    class B { 
     template<class> friend class Y; // meaning ::Y 
    }; 
}; 

から端例]

)、これは同様にすべての標準で場所で使用される実際

、例えば

// §20.4.2.1[tuple.cnstr]/10-13 
tuple(const tuple& u) = default; 
tuple(tuple&& u) = default; 

// §21.4.6.1[string::op+=]/1-2 
basic_string& operator+=(const basic_string& str); 

// etc. 
関連する問題