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,>
davy.ai
GCC es correcto aquí.