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