У меня есть следующий код, где я использую выражение сгиба, чтобы оценить, все ли параметры пакета могут быть преобразованы в первый аргумент функции.По какой-то причине он не компилируется в msvc, когда я делаю то, что кажется очень тривиальным изменением:
#include <type_traits>
#define TRY 1
#if TRY == 1
template<typename B, typename... Args,
std::enable_if_t<((std::is_convertible_v<Args&, B&> && ...)), bool> = true>
void fn(B b, Args...args) {}
#else
template<typename B, typename... Args,
typename = std::enable_if_t<(std::is_convertible_v<Args&, B&> && ...)>>
void fn(B b, Args...args) {}
#endif
int main()
{
fn(5, 4, 2);
return 0;
}
Измените TRY
на 0
, чтобы его компилировать, демонстрация в: https://godbolt.org/z/EGvQ-N
Есть ли важное различие между двумя вариантами, которые мне не хватает, или это ошибка компилятора?