en C++ que está bien tener un funcction que tiene una función de tipo de locales:¿Por qué las plantillas no pueden tomar tipos locales de funciones?
int main() {
struct S { static void M(const S& s) { } };
S s;
S::M(s);
}
pero no bien tener una plantilla que hace:
template<typename T> void Foo(const T& t) { }
int main() {
struct S { } s;
Foo(s); // Line 5: error: no matching function for call to 'Foo(main()::S&)'
}
14.3.1 paragraph 2 in the c++ standard.
Un tipo sin vinculación [...] no se utilizará como argumento de plantilla para una plantilla tipo-parámetro
¿Por qué C++ no permite eso?
La mejor explicación que he oído hasta ahora es que los tipos de interiores tienen ninguna vinculación y que esto podría implicar que una función que les toma como arg debe tener ninguna vinculación. Pero no hay ninguna razón por la que pueda ver que una instanciación de plantilla debe tener un vínculo.
p.s. No digas "thats not allowed because the standard says it's not"
No hay una buena razón, y C++ 0x eliminará esta restricción (pero no la que está vinculada en las páginas, todavía no tengo ni idea de por qué no está permitido). –
@Mike; ¡Corto y al grano! – BCS