LINUX.ORG.RU

История изменений

Исправление 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, :

Опять какой-то бред с «проверками визитора». Что в лоб, что по лбу…

https://godbolt.org/z/YMjv6eedY