mirror of
https://github.com/llvm-mirror/libcxx.git
synced 2025-10-22 16:37:40 +08:00

These tests are failing in XCode 8.0, 8.1, and 8.2, but not in Xcode 8.3. Annoyingly the version numbering for clang does not follow Xcode and is bumped to 8.1 only in Xcode 8.3. So Xfailing apple-clang-8.0 should catch all cases here. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296704 91177308-0d34-0410-b5e6-96231b3b80d8
64 lines
1.7 KiB
C++
64 lines
1.7 KiB
C++
// -*- C++ -*-
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is dual licensed under the MIT and the University of Illinois Open
|
|
// Source Licenses. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// UNSUPPORTED: c++98, c++03, c++11, c++14
|
|
|
|
// The following compilers don't consider a type an aggregate type (and
|
|
// consequently not a literal type) if it has a base class at all.
|
|
// In C++17, an aggregate type is allowed to have a base class if it's not
|
|
// virtual, private, nor protected (e.g. ConstexprTestTypes:::NoCtors).
|
|
// XFAIL: gcc-5, gcc-6
|
|
// XFAIL: clang-3.5, clang-3.6, clang-3.7, clang-3.8
|
|
// XFAIL: apple-clang-6, apple-clang-7, apple-clang-8.0
|
|
|
|
// <variant>
|
|
|
|
// template <class ...Types> class variant;
|
|
|
|
// constexpr size_t index() const noexcept;
|
|
|
|
#include <cassert>
|
|
#include <string>
|
|
#include <type_traits>
|
|
#include <variant>
|
|
|
|
#include "archetypes.hpp"
|
|
#include "test_macros.h"
|
|
#include "variant_test_helpers.hpp"
|
|
|
|
int main() {
|
|
{
|
|
using V = std::variant<int, ConstexprTestTypes::NoCtors>;
|
|
constexpr V v;
|
|
static_assert(v.index() == 0, "");
|
|
}
|
|
{
|
|
using V = std::variant<int, long>;
|
|
constexpr V v(std::in_place_index<1>);
|
|
static_assert(v.index() == 1, "");
|
|
}
|
|
{
|
|
using V = std::variant<int, std::string>;
|
|
V v("abc");
|
|
assert(v.index() == 1);
|
|
v = 42;
|
|
assert(v.index() == 0);
|
|
}
|
|
#ifndef TEST_HAS_NO_EXCEPTIONS
|
|
{
|
|
using V = std::variant<int, MakeEmptyT>;
|
|
V v;
|
|
assert(v.index() == 0);
|
|
makeEmpty(v);
|
|
assert(v.index() == std::variant_npos);
|
|
}
|
|
#endif
|
|
}
|