使用はオーバーロードの高く評価されている方法の 1 つであることは理解していますtemplates
が、なぜauto
関数パラメーターの型推定に使用できないので、関数のオーバーロードを支援するのか疑問に思っていました。
N3690
7.6.1.4/3 で、auto を使用してラムダ式を汎用にすることができると述べており、この例を提供しています
auto glambda = [](int i, auto a) { return i; };//OK: a generic lambda
(注: これは N3485 には記載されていません)
1).なぜ私は通常の関数に対して同様のことを行うことができないのですか?
void swap(auto& param1, decltype(param1)& param2)
{
decltype(param1) temp = param1;
param1 = param2;
param2 = temp;
}
これによりエラーが発生しerror : parameters declared auto
ます。
N3690 7.1.6.4/4 から
auto または decltype(auto) を使用して宣言された変数の型は、その初期化子から推測されます。この使用は、ブロック (6.3)、名前空間スコープ (3.3.6)、および for-init-statement (6.5.3) で変数を宣言するときに許可されます。[...]
param1
andparam2
がブロック スコープに該当し、自動控除の対象になると仮定するのは間違っていますか?
2)。そのような機能が許可されている場合、落とし穴は何でしょうか?
私はgcc 4.8.1を使用しています。
ありがとうございました