This patch avoids accessing an unset `std::optional<>`, which is a part of the manifestation of #100095. The other part is an assertion failure that is not addressed here. This is not a proper fix, but enables Clang to continue working with more libc++ runtime checks enabled (specifically, `-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FAST`, which checks access to unset optionals among other things). A proper fix is being discussed on #100095.
18 lines
516 B
C++
18 lines
516 B
C++
// RUN: %clang_cc1 -fsyntax-only -std=c++11 %s
|
|
// XFAIL: asserts
|
|
|
|
template <class> struct Pair;
|
|
template <class...> struct Tuple {
|
|
template <class _Up> Tuple(_Up);
|
|
};
|
|
template <typename> struct StatusOr;
|
|
template <int> using ElementType = int;
|
|
template <int... fields>
|
|
using Key = Tuple<ElementType<fields>...>;
|
|
template <int... fields>
|
|
StatusOr<Pair<Key<fields...>>> Parser();
|
|
struct Helper { Helper(Tuple<>, Tuple<>, int, int); };
|
|
struct D : Helper {
|
|
D(Key<> f, int n, int e) : Helper(f, Parser<>, n, e) {}
|
|
};
|