La descripción de std::is_voidestablece que:
Proporciona el valor de la constante del miembro que es igual a verdadero, si T es del tipo void, const void, volatile void o const volatile void.
Entonces, ¿qué podría ser const void, o un volatile void?
Esta respuesta indica que el const voidtipo de retorno no sería válido (sin embargo, se compila en VC ++ 2015)
const void foo() { }
Si, por norma, const voidno es válido (VC es incorrecto), ¿qué es const void?

voidsin ellaconst".voidRespuestas:
const voides un tipo al que puede formar un puntero. Es similar a un puntero vacío normal, pero las conversiones funcionan de manera diferente. Por ejemplo, aconst int*no se puede convertir implícitamente en avoid*, pero se puede convertir implícitamente en aconst void*. Del mismo modo, si tiene un,const void*no puedestatic_casthacerlo a unint*, pero puedestatic_casthacerlo a unconst int*.const int i = 10; void* vp = &i; // error const void* cvp = &i; // ok auto ip = static_cast<int*>(cvp); // error auto cip = static_cast<const int*>(cvp); // okfuente
const void, pero se trata de punteros vacíos y no vacíos [con (no) constancia].const void*es la única razón por la que alguna vez veríasconst void. Se puede pasar como un argumento de plantilla, pero ese tipo de argumento solo se instanciará con un*al final.const voiden la pregunta formulada por un abogado de idiomasconst voides que se pueden hacer todos los tipos en C ++const. "Existe" de la misma manera quevoidexiste. La respuesta de @Benjamin Lindley explica qué es cuando lo ve y cómo lo usa.Como
void,const voides un tipo vacío. Sin embargo, siconst voides un tipo de retorno , noconsttiene sentido (¡aunque es legal!), Porque [expr] / 6 :Sin embargo, es un tipo válido en sí mismo y ocurre, por ejemplo , en funciones de biblioteca estándar C , donde se usa para garantizar la corrección constante de los punteros de los argumentos:
int const*no se puede convertir avoid*, perovoid const*.fuente
const voidya que un tipo de retorno afecta al tipo de función, por lo que no es completamente insignificante.Los tipos pueden ser el resultado de plantillas; una plantilla puede declarar
const Ty crear una instancia conTcomovoid.La respuesta vinculada es engañosa, o más bien, limitada en vista de que se refiere al caso especial de un tipo sin plantilla, e incluso entonces
const voidpodría no tener sentido , pero es un código válido .fuente