// RUN: %clang_cc1 -std=c++26 -triple x86_64-linux-gnu -emit-llvm -o - %s | FileCheck %s

namespace std {
using size_t = decltype(sizeof(0));
template <typename T> struct tuple_size;
template <size_t I, typename T> struct tuple_element;

template <typename T> struct tuple_size<const T> : tuple_size<T> {};

template <size_t I, typename T> struct tuple_element<I, const T> {
  using type = const typename tuple_element<I, T>::type;
};
} // namespace std

using u8 = unsigned char;

template <u8 N> struct Range {
  template <std::size_t I>
  constexpr friend u8 get(Range) noexcept {
    return I;
  }
};

namespace std {
template <u8 N> struct tuple_size<Range<N>> {
  static constexpr std::size_t value = N;
};
template <std::size_t I, u8 N> struct tuple_element<I, Range<N>> {
  using type = u8;
};
} // namespace std

const u8 &f() {
  static constexpr auto [I] = Range<1>();
  return I;
}

// CHECK: @[[TMP:_ZZ1fvE1I]] = internal constant i8 0, align 1
// CHECK-LABEL: define {{.*}} @_Z1fv(
// CHECK: ret ptr @[[TMP]]
