1afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow//===----------------------------------------------------------------------===// 2afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow// 3afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow// The LLVM Compiler Infrastructure 4afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow// 5afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow// This file is dual licensed under the MIT and the University of Illinois Open 6afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow// Source Licenses. See LICENSE.TXT for details. 7afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow// 8afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow//===----------------------------------------------------------------------===// 9afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow 10afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow// UNSUPPORTED: c++98, c++03, c++11 11afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow// <experimental/type_traits> 12afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow 13afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow// template<class... B> struct disjunction; 14afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow// template<class... B> 15afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow// constexpr bool disjunction_v = disjunction<B...>::value; 16afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow 17afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow#include <experimental/type_traits> 18afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow#include <cassert> 19afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow 20afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clownamespace ex = std::experimental; 21afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow 22afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clowstruct True { static constexpr bool value = true; }; 23afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clowstruct False { static constexpr bool value = false; }; 24afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow 25afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clowint main() 26afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow{ 27afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert (!ex::disjunction<>::value, "" ); 28afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction<std::true_type >::value, "" ); 29afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert (!ex::disjunction<std::false_type>::value, "" ); 30afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow 31afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert (!ex::disjunction_v<>, "" ); 32afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction_v<std::true_type >, "" ); 33afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert (!ex::disjunction_v<std::false_type>, "" ); 34afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow 35afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction<std::true_type, std::true_type >::value, "" ); 36afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction<std::true_type, std::false_type>::value, "" ); 37afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction<std::false_type, std::true_type >::value, "" ); 38afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert (!ex::disjunction<std::false_type, std::false_type>::value, "" ); 39afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow 40afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction_v<std::true_type, std::true_type >, "" ); 41afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction_v<std::true_type, std::false_type>, "" ); 42afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction_v<std::false_type, std::true_type >, "" ); 43afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert (!ex::disjunction_v<std::false_type, std::false_type>, "" ); 44afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow 45afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction<std::true_type, std::true_type, std::true_type >::value, "" ); 46afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction<std::true_type, std::false_type, std::true_type >::value, "" ); 47afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction<std::false_type, std::true_type, std::true_type >::value, "" ); 48afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction<std::false_type, std::false_type, std::true_type >::value, "" ); 49afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction<std::true_type, std::true_type, std::false_type>::value, "" ); 50afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction<std::true_type, std::false_type, std::false_type>::value, "" ); 51afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction<std::false_type, std::true_type, std::false_type>::value, "" ); 52afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert (!ex::disjunction<std::false_type, std::false_type, std::false_type>::value, "" ); 53afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow 54afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction_v<std::true_type, std::true_type, std::true_type >, "" ); 55afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction_v<std::true_type, std::false_type, std::true_type >, "" ); 56afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction_v<std::false_type, std::true_type, std::true_type >, "" ); 57afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction_v<std::false_type, std::false_type, std::true_type >, "" ); 58afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction_v<std::true_type, std::true_type, std::false_type>, "" ); 59afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction_v<std::true_type, std::false_type, std::false_type>, "" ); 60afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction_v<std::false_type, std::true_type, std::false_type>, "" ); 61afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert (!ex::disjunction_v<std::false_type, std::false_type, std::false_type>, "" ); 62afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow 63afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction<True >::value, "" ); 64afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert (!ex::disjunction<False>::value, "" ); 65afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow 66afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert ( ex::disjunction_v<True >, "" ); 67afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow static_assert (!ex::disjunction_v<False>, "" ); 68afa9b590b2bed07e26e79dc4dd22b9942c8ec85cMarshall Clow} 69