Hacer cumplir "noexcept" en std :: function?

Este código se compila y se ejecuta, arrojando elint:

#include <functional>

void r( std::function<void() noexcept> f ) { f(); }

void foo() { throw 1; }

int main()
{
    r(foo);
}

Sin embargo, me gustaría que el compilador rechazara la línear(foo); porquer solo se debe pasar unnoexcept función. losnoexcept El especificador parece ser ignorado. ¿Hay alguna forma de lograr eso?

Editar: esta pregunta es diferente a¿Se supone que el conocimiento sobre noexcept-ness se reenvía al pasar un puntero de función? porque estoy pidiendo un remedio, específicamente en el caso destd::function.

Respuestas a la pregunta(1)

Su respuesta a la pregunta