
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. llvm-svn: 296704
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
|
|
}
|