El borrador de trabajo indica explícitamente que funciones predeterminadas deben ser funciones miembro especiales (por ejemplo, copy-constructor, default-constructor, etc., (§8.4.2.1-1)). Lo cual tiene perfecto sentido.¿Puede cualquier función ser una función eliminada?
Sin embargo, no veo ninguna restricción de este tipo en las funciones suprimidas (§8.4.3). ¿Está bien?
O en otras palabras, ¿estos tres ejemplos son válidos c++0
?
struct Foo
{
// 1
int bar(int) = delete;
};
// 2
int baz(int) = delete;
template< typename T >
int boo(T t);
// 3
template<>
int boo<int>(int t) = delete;
¿Qué es una función eliminada? – Puppy
Una función eliminada es una que habría existido si no se hubiera eliminado. P.ej. puede eliminar la copia de clase ctor. Esto es ligeramente superior a hacerlo privado sin implementar, por dos razones. 1. es más obvio cuando lee el código y 2. puede obtener un mensaje de error más claro. – MSalters
@MSalters: también puede eliminar funciones que no existen, lo que impide su uso. P.ej. dado 'void f (doble); void f (int) = delete; ', f (42) ahora es un error en lugar de usar conversión implícita. –