2016-05-09 9 views
1

this answer私はラムダで定義された構造体内にテンプレート化されたメソッドを定義できることを指摘します。私がこれをしようとするとgccはコンパイラエラーを出します。 http://webcompiler.cloudapp.net/でテストすることができます。このコードは、Visual Studioで正常に実行さ私はVisual Studioのラムダ内でテンプレート化関数を定義できます

[]{struct{ 
    template <typename T> foo() { cout << "default\n"; } 
    template <> foo<char> foo() { cout << "specialized\n"; } } result; 
    return result; } 

Live Example

が、リンクGCCコード:私はここにシンプルな場合を例に書かれてきたMinimal, Complete, Verifiable Exampleの目的のために

ローカルクラスのメンバテンプレートの

無効宣言

+0

Visual Studioでこのコードをコンパイルすることを許可してはいけないと考えていたので、それは続きましたが、私はリンクされた質問を編集しました。そして、それは間違いなくクロスプラットフォームの標準に準拠したコードではありません。 –

答えて

3

[temp.mem]から:

非閉鎖型のローカルクラスは、メンバーテンプレートを持っていてはなりません。

私はVisual Studioが何をしているのか分かりません。

+0

Hmmm ...私は「ローカルクラスの非閉鎖型」が何であるかを知るには十分にわかりません...いくつかの定義で私を助けてくれますか? –

+0

@JonathanMeeクロージャータイプは、ラムダ式のタイプです。ローカルクラスは、関数内で宣言されたクラスです。 – Barry

+0

@JonathanMeeラムダのタイプはクロージャタイプです。それ以外はすべて非閉包型です。 'struct'はローカルであり、クロージャー型ではないので、メンバーテンプレートを持つことはできません。 – Angew

関連する問題