¿Por qué este fragmento de C ++ se compila (la función no vacía no devuelve un valor) [duplicado]

Esta pregunta ya tiene una respuesta aquí:

¿Por qué el hecho de salir del final de una función no vacía sin devolver un valor no produce un error de compilación? 8 respuestas

Encontré esto en una de mis bibliotecas esta mañana:

static tvec4 Min(const tvec4& a, const tvec4& b, tvec4& out)
{
    tvec3::Min(a,b,out);
    out.w = min(a.w,b.w);
}

Esperaría un error del compilador porque este método no devuelve nada, y el tipo de retorno no esvoid.

Las únicas dos cosas que vienen a la mente son

En el único lugar donde se llama a este método, el valor de retorno no se está utilizando o almacenando. (Este método se suponía que eravoid - latvec4 el tipo de retorno es un error de copiar y pegar)

un valor por defecto construidotvec4 se está creando, lo que parece un poco diferente, oh, todo lo demás en C ++.

No he encontrado la parte de la especificación de C ++ que aborda esto. Las referencias (ha) son apreciadas.

Actualizar

Enalgunos Circunstancias, esto genera un error en VS2012. No he reducido los detalles, pero es interesante, sin embargo.

Respuestas a la pregunta(7)

Su respuesta a la pregunta