このプログラム考えてみましょう:fooがFoo<double>
としてインスタンス化されている場合、上記で参考とconstの
template<typename T>
struct Foo
{
void foo(const T&) {}
void foo(T&) {}
};
int main()
{
Foo<double&> f;
double d = 3.14;
f.foo(d); //complains that foo() is ambigous
}
を、その後、物事は罰金ですが、それはFoo<double&>
としてインスタンス化される場合は、foo
への呼び出しがあいまいになります。 foo
のパラメータタイプを推測するときにrefがここで崩壊しているのですか?もしそうならconstanceはなぜ無視されますか?テンプレートパラメータdouble&
で
template<typename T>
struct Foo {
void foo(T const&) {}
void foo(T&) {}
};
:
あなたが無視されて 'const'nessで何を意味するのですか?その「const」をどこで使っていますか? – Elyasin
[OK]を、私はここで答えを見つけた - https://stackoverflow.com/a/27728034/150365 –
@bolovは重複は関係していないようです。この場合、OPはクラステンプレートではなく関数テンプレートを参照するためです。 – 101010