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 //===----------------------------------------------------------------------===//
10 #ifndef LIBCXX_TEST_SUPPORT_INDIRECTLY_READABLE_H
11 #define LIBCXX_TEST_SUPPORT_INDIRECTLY_READABLE_H
13 #include <type_traits>
15 template <class Token
>
18 template <class Token
>
19 struct T1
: Common
<Token
> { };
21 template <class Token
>
22 struct T2
: Common
<Token
> { };
24 template <template <class> class T1Qual
, template <class> class T2Qual
, class Token
>
25 struct std::basic_common_reference
<T1
<Token
>, T2
<Token
>, T1Qual
, T2Qual
> {
26 using type
= Common
<Token
>;
28 template <template <class> class T2Qual
, template <class> class T1Qual
, class Token
>
29 struct std::basic_common_reference
<T2
<Token
>, T1
<Token
>, T2Qual
, T1Qual
>
30 : std::basic_common_reference
<T1
<Token
>, T2
<Token
>, T1Qual
, T2Qual
>
33 template <class Token
>
34 struct IndirectlyReadable
{
35 using value_type
= T1
<Token
>;
36 T2
<Token
>& operator*() const;
39 #endif // LIBCXX_TEST_SUPPORT_INDIRECTLY_READABLE_H