以下が許可されているかどうか知りたいのですが:
template < class C >
void function(C&);
void function() {
class {} local;
function(local);
}
ありがとう
以下が許可されているかどうか知りたいのですが:
template < class C >
void function(C&);
void function() {
class {} local;
function(local);
}
ありがとう
現在は許可されていません。ただし、C++0x ではサポートされています。現在の標準は次のように述べています14.3.1/2
ローカル型、リンケージのない型、名前のない型、またはこれらの型のいずれかを組み合わせた型は、テンプレート型パラメーターのテンプレート引数として使用してはなりません。
とはいえ、関数もローカルなら問題ない
void f() {
class L {} local;
struct C {
static void function(L &l) {
// ...
}
};
C::function(local);
}
テンプレートの代わりにポリモーフィズムを使用する場合は許可されます。または、 で表示されるインターフェイスを拡張する必要がない場合はfunction
、単純な継承で十分です。
void function( ABC & );
void function() {
class special : public ABC {
virtual void moof() {}
} local;
function(local);
}