40 lines · c
1// -*- C++ -*-2//===----------------------------------------------------------------------===//3//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-exception7//8//===----------------------------------------------------------------------===//9 10#ifndef LIBCXX_TEST_SUPPORT_INDIRECTLY_READABLE_H11#define LIBCXX_TEST_SUPPORT_INDIRECTLY_READABLE_H12 13#include <type_traits>14 15template <class Token>16struct Common { };17 18template <class Token>19struct T1 : Common<Token> { };20 21template <class Token>22struct T2 : Common<Token> { };23 24template <template <class> class T1Qual, template <class> class T2Qual, class Token>25struct std::basic_common_reference<T1<Token>, T2<Token>, T1Qual, T2Qual> {26 using type = Common<Token>;27};28template <template <class> class T2Qual, template <class> class T1Qual, class Token>29struct std::basic_common_reference<T2<Token>, T1<Token>, T2Qual, T1Qual>30 : std::basic_common_reference<T1<Token>, T2<Token>, T1Qual, T2Qual>31{ };32 33template <class Token>34struct IndirectlyReadable {35 using value_type = T1<Token>;36 T2<Token>& operator*() const;37};38 39#endif // LIBCXX_TEST_SUPPORT_INDIRECTLY_READABLE_H40