El código siguiente genera un error de compilación en Xcode:parámetros de plantilla implícitos
template <typename T>
struct Foo
{
Foo(T Value)
{
}
};
int main()
{
Foo MyFoo(123);
return 0;
}
error: missing template arguments before 'MyFoo'
Cambio Foo MyFoo(123);
a Foo<int> MyFoo(123);
corrige el problema, pero no deben ser el compilador capaz de averiguar la adecuada ¿tipo de datos?
¿Es esto un error del compilador, o estoy malinterpretando los parámetros implícitos de la plantilla?
si se pudiera inferir el tipo, se podría inferir el espacio. –
Puede inferir el tipo para la llamada al constructor, pero no para el espacio de almacenamiento. Si define una variable como simplemente 'Foo', ¿puede contener tanto' Foo 'como' Foo '? ¿O siempre sabe que es secretamente un 'Foo ' en el corazón de los corazones? Si la variable fuera 'const', entonces podría implementarse, ya que el valor no podría reasignarse, pero luego tendríamos diferentes reglas léxicas para' const T' vs 'T' y se producirían grandes estragos. –