2 //===----------------------------------------------------------------------===//
4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 // See https://llvm.org/LICENSE.txt for license information.
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
8 //===----------------------------------------------------------------------===//
9 #ifndef LIBCXX_TEST_SUPPORT_INDIRECTLY_READABLE_H
10 #define LIBCXX_TEST_SUPPORT_INDIRECTLY_READABLE_H
12 #include <type_traits>
14 template <class Token
>
17 template <class Token
>
18 struct T1
: Common
<Token
> { };
20 template <class Token
>
21 struct T2
: Common
<Token
> { };
23 template <template <class> class T1Qual
, template <class> class T2Qual
, class Token
>
24 struct std::basic_common_reference
<T1
<Token
>, T2
<Token
>, T1Qual
, T2Qual
> {
25 using type
= Common
<Token
>;
27 template <template <class> class T2Qual
, template <class> class T1Qual
, class Token
>
28 struct std::basic_common_reference
<T2
<Token
>, T1
<Token
>, T2Qual
, T1Qual
>
29 : std::basic_common_reference
<T1
<Token
>, T2
<Token
>, T1Qual
, T2Qual
>
32 template <class Token
>
33 struct IndirectlyReadable
{
34 using value_type
= T1
<Token
>;
35 T2
<Token
>& operator*() const;
38 #endif // LIBCXX_TEST_SUPPORT_INDIRECTLY_READABLE_H