Программы на C++. Форум разработчиков
Anonymous
Почему этот код C ++ с расширенными сгибами ограничения отклоняется Clang Trunk?
Сообщение
Anonymous » 10 апр 2025, 12:34
Код: Выделить всё
#include
template
concept floating_point = std::is_floating_point_v;
template
concept integral = std::is_integral_v;
template
concept arithmetic = floating_point || integral;
// ------------------------------------
template
constexpr int f() {
return 1;
}
template
constexpr int f() {
return 2;
}
// ------------------------------------
template
requires(arithmetic && ...)
constexpr int g() {
return 1;
}
template
requires(floating_point && ...)
constexpr int g() {
return 2;
}
// ------------------------------------
template
concept all_arithmetic = (arithmetic && ...);
template
concept all_floating_point = (floating_point && ...);
template
requires all_arithmetic
constexpr int h() {
return 1;
}
template
requires all_floating_point
constexpr int h() {
return 2;
}
// ------------------------------------
static_assert(f() == 1); // ok
static_assert(f() == 2); // ok
static_assert(g() == 1); // ok
static_assert(g() == 2); // ok
static_assert(h() == 1); // ok
static_assert(h() == 2); // error (why is this not resolved even after p2963?)
int main() {}
< /code>
ошибка: < /p>
:67:15: error: call to 'h' is ambiguous
67 | static_assert(h() == 2); // error (why is this not resolved even after p2963?)
| ^~~~~~~~~
https://godbolt.org/z/jnye1jqqm
образно пакет параметров эквивалентны, а арифметика submers floating_point .
Я не знаю, почему именование сгиба>
Подробнее здесь:
https://stackoverflow.com/questions/795 ... lang-trunk
1744277640
Anonymous
[code]#include template concept floating_point = std::is_floating_point_v; template concept integral = std::is_integral_v; template concept arithmetic = floating_point || integral; // ------------------------------------ template constexpr int f() { return 1; } template constexpr int f() { return 2; } // ------------------------------------ template requires(arithmetic && ...) constexpr int g() { return 1; } template requires(floating_point && ...) constexpr int g() { return 2; } // ------------------------------------ template concept all_arithmetic = (arithmetic && ...); template concept all_floating_point = (floating_point && ...); template requires all_arithmetic constexpr int h() { return 1; } template requires all_floating_point constexpr int h() { return 2; } // ------------------------------------ static_assert(f() == 1); // ok static_assert(f() == 2); // ok static_assert(g() == 1); // ok static_assert(g() == 2); // ok static_assert(h() == 1); // ok static_assert(h() == 2); // error (why is this not resolved even after p2963?) int main() {} < /code> ошибка: < /p> :67:15: error: call to 'h' is ambiguous 67 | static_assert(h() == 2); // error (why is this not resolved even after p2963?) | ^~~~~~~~~ [/code] https://godbolt.org/z/jnye1jqqm образно пакет параметров эквивалентны, а арифметика submers floating_point . Я не знаю, почему именование сгиба> Подробнее здесь: [url]https://stackoverflow.com/questions/79565469/why-is-this-c-code-with-fold-expanded-constraints-rejected-by-clang-trunk[/url]