История изменений
Исправление Siborgium, (текущая версия) :
Опять какой-то бред с «проверками визитора». Что в лоб, что по лбу…
https://godbolt.org/z/YMjv6eedY
#include <tuple>
#include <type_traits>
using namespace std;
template <typename T>
constexpr bool check_visitor = []<auto ... I>(std::index_sequence<I...>){
return ((!is_same_v<tuple_element_t<I, T>, bool>) && ...);
}(std::make_index_sequence<std::tuple_size_v<T>>{});
int main() {
static_assert(check_visitor<tuple<int, double, char>>);
//static_assert(check_visitor<tuple<int, double, bool>>); // fails
}
Исправление Siborgium, :
Опять какой-то бред с «проверками визитора». Что в лоб, что по лбу…
https://godbolt.org/z/YMjv6eedY
#include <tuple>
#include <type_traits>
using namespace std;
template <typename T>
constexpr bool check_visitor = []<auto ... I>(std::index_sequence<I...>){
return ((!is_same_v<tuple_element_t<I, T>, bool>) && ...);
}(std::make_index_sequence<std::tuple_size_v<T>>{});
int main() {
static_assert(check_visitor<tuple<int, double, char>>);
// static_assert(check_visitor<tuple<int, double, bool>>); // fails
}
Исправление Siborgium, :
Опять какой-то бред с «проверками визитора». Что в лоб, что по лбу…
https://godbolt.org/z/YMjv6eedY
#include <tuple>
#include <type_traits>
using namespace std;
template <typename T>
constexpr bool check_visitor = []<auto ... I>(std::index_sequence<I...>){
return ((!is_same_v<tuple_element_t<I, T>, bool>) && ...);
}(std::make_index_sequence<std::tuple_size_v<T>>{});
int main() {
static_assert(check_visitor<tuple<int, double, char>>);
// static_assert(check_visitor<tuple<int, double, bool>>); // fails
}
Исходная версия Siborgium, :