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 Dionneint 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