es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Variación de compilador en la deducción de argumentos de plantilla de función.

El siguiente programa:

#include <type_traits>

template<typename t,="" bool="" b="">
struct S{
    S() = default;

    template<bool sfinae="true," typename=""></bool><sfinae &&=""></sfinae><t>::value>>
    operator S<t const,="" b="">() { return S<t const,="" b="">{}; }
};

template<typename t,="" bool="" b1,="" bool="" b2="">
void f(S<const></const><t>, b1>,
       S<t, b2="">)
{}

int main() {
    S<int, true=""> s1{};
    S<int, false=""> s2{};
    f(s1, s2);
}

es aceptado por GCC (11.2) pero rechazado por Clang (13) y MSVC (19.latest), todos para -std=c++20 / /std:c++20 (DEMO).

¿Qué compilador es el correcto aquí?</int,></int,></t,>

Tags:  , , , ,

Answer

Comments are closed.