xref: /llvm-project/libcxx/test/std/utilities/function.objects/logical.operations/transparent.pass.cpp (revision 31cbe0f240f660f15602c96b787c58a26f17e179)
15a83710eSEric Fiselier //===----------------------------------------------------------------------===//
25a83710eSEric Fiselier //
357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65a83710eSEric Fiselier //
75a83710eSEric Fiselier //===----------------------------------------------------------------------===//
85a83710eSEric Fiselier 
9*31cbe0f2SLouis Dionne // UNSUPPORTED: c++03, c++11
105a83710eSEric Fiselier #include <functional>
115a83710eSEric Fiselier #include <string>
125a83710eSEric Fiselier 
137fc6a556SMarshall Clow #include "test_macros.h"
147fc6a556SMarshall Clow 
15aae63566SStephan T. Lavavej template <class T>
165a83710eSEric Fiselier struct is_transparent
175a83710eSEric Fiselier {
185a83710eSEric Fiselier private:
19709be5eeSStephan T. Lavavej     struct two {char lx; char lxx;};
20709be5eeSStephan T. Lavavej     template <class U> static two test(...);
21709be5eeSStephan T. Lavavej     template <class U> static char test(typename U::is_transparent* = 0);
225a83710eSEric Fiselier public:
23709be5eeSStephan T. Lavavej     static const bool value = sizeof(test<T>(0)) == 1;
245a83710eSEric Fiselier };
255a83710eSEric Fiselier 
265a83710eSEric Fiselier 
main(int,char **)272df59c50SJF Bastien int main(int, char**)
286edc12c8SAsiri Rathnayake {
295a83710eSEric Fiselier     static_assert ( !is_transparent<std::logical_and<int>>::value, "" );
305a83710eSEric Fiselier     static_assert ( !is_transparent<std::logical_and<std::string>>::value, "" );
315a83710eSEric Fiselier     static_assert (  is_transparent<std::logical_and<void>>::value, "" );
325a83710eSEric Fiselier     static_assert (  is_transparent<std::logical_and<>>::value, "" );
335a83710eSEric Fiselier 
345a83710eSEric Fiselier     static_assert ( !is_transparent<std::logical_or<int>>::value, "" );
355a83710eSEric Fiselier     static_assert ( !is_transparent<std::logical_or<std::string>>::value, "" );
365a83710eSEric Fiselier     static_assert (  is_transparent<std::logical_or<void>>::value, "" );
375a83710eSEric Fiselier     static_assert (  is_transparent<std::logical_or<>>::value, "" );
385a83710eSEric Fiselier 
395a83710eSEric Fiselier     static_assert ( !is_transparent<std::logical_not<int>>::value, "" );
405a83710eSEric Fiselier     static_assert ( !is_transparent<std::logical_not<std::string>>::value, "" );
415a83710eSEric Fiselier     static_assert (  is_transparent<std::logical_not<void>>::value, "" );
425a83710eSEric Fiselier     static_assert (  is_transparent<std::logical_not<>>::value, "" );
435a83710eSEric Fiselier 
445a83710eSEric Fiselier     return 0;
455a83710eSEric Fiselier }
46