brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · 2439e2b Raw
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