xref: /llvm-project/libcxx/test/std/utilities/tuple/tuple.tuple/PR38601.pass.cpp (revision 048688fd80fadce1c72c365b0d74599a33389cfb)
1d2eccf9bSLouis Dionne //===----------------------------------------------------------------------===//
2d2eccf9bSLouis Dionne //
3d2eccf9bSLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4d2eccf9bSLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
5d2eccf9bSLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6d2eccf9bSLouis Dionne //
7d2eccf9bSLouis Dionne //===----------------------------------------------------------------------===//
8d2eccf9bSLouis Dionne 
9d2eccf9bSLouis Dionne // Regression test for https://llvm.org/PR38601
10d2eccf9bSLouis Dionne 
11d2eccf9bSLouis Dionne // UNSUPPORTED: c++03
12d2eccf9bSLouis Dionne 
13d2eccf9bSLouis Dionne #include <cassert>
14d2eccf9bSLouis Dionne #include <tuple>
15d2eccf9bSLouis Dionne 
16d2eccf9bSLouis Dionne using Base = std::tuple<int, int>;
17d2eccf9bSLouis Dionne 
18d2eccf9bSLouis Dionne struct Derived : Base {
19d2eccf9bSLouis Dionne     template <class ...Ts>
DerivedDerived20d2eccf9bSLouis Dionne     Derived(int x, Ts... ts): Base(ts...), x_(x) { }
operator intDerived21d2eccf9bSLouis Dionne     operator int () const { return x_; }
22d2eccf9bSLouis Dionne     int x_;
23d2eccf9bSLouis Dionne };
24d2eccf9bSLouis Dionne 
main(int,char **)25*048688fdSLouis Dionne int main(int, char**) {
26d2eccf9bSLouis Dionne     Derived d(1, 2, 3);
27d2eccf9bSLouis Dionne     Base b = static_cast<Base>(d);
28d2eccf9bSLouis Dionne     assert(std::get<0>(b) == 2);
29d2eccf9bSLouis Dionne     assert(std::get<1>(b) == 3);
30d2eccf9bSLouis Dionne     return 0;
31d2eccf9bSLouis Dionne }
32