blob: 8a05f66606459e3f5e3905bf358af60b2c5a2042 [file] [log] [blame]
// { dg-do compile { target c++1y } }
// { dg-options "-I${srcdir}/g++.dg/cpp1y -I${srcdir}/g++.dg/cpp1y/testinc" }
// Begin C++11 tests.
#ifndef __cpp_unicode_characters
# error "__cpp_unicode_characters"
#elif __cpp_unicode_characters != 200704
# error "__cpp_unicode_characters != 200704"
#endif
#ifndef __cpp_raw_strings
# error "__cpp_raw_strings"
#elif __cpp_raw_strings != 200710
# error "__cpp_raw_strings != 200710"
#endif
#ifndef __cpp_unicode_literals
# error "__cpp_unicode_literals"
#elif __cpp_unicode_literals != 200710
# error "__cpp_unicode_literals != 200710"
#endif
#ifndef __cpp_user_defined_literals
# error "__cpp_user_defined_literals"
#elif __cpp_user_defined_literals != 200809
# error "__cpp_user_defined_literals != 200809"
#endif
#ifndef __cpp_lambdas
# error "__cpp_lambdas"
#elif __cpp_lambdas != 200907
# error "__cpp_lambdas != 200907"
#endif
#ifndef __cpp_constexpr
# error "__cpp_constexpr"
#elif __cpp_constexpr != 200704
# error "__cpp_constexpr != 200704"
#endif
#ifndef __cpp_static_assert
# error "__cpp_static_assert"
#elif __cpp_static_assert != 200410
# error "__cpp_static_assert != 200410"
#endif
#ifndef __cpp_decltype
# error "__cpp_decltype"
#elif __cpp_decltype != 200707
# error "__cpp_decltype != 200707"
#endif
#ifndef __cpp_attributes
# error "__cpp_attributes"
#elif __cpp_attributes != 200809
# error "__cpp_attributes != 200809"
#endif
#ifndef __cpp_rvalue_reference
# error "__cpp_rvalue_reference"
#elif __cpp_rvalue_reference != 200610
# error "__cpp_rvalue_reference != 200610"
#endif
#ifndef __cpp_variadic_templates
# error "__cpp_variadic_templates"
#elif __cpp_variadic_templates != 200704
# error "__cpp_variadic_templates != 200704"
#endif
#ifndef __cpp_alias_templates
# error "__cpp_alias_templates"
#elif __cpp_alias_templates != 200704
# error "__cpp_alias_templates != 200704"
#endif
// Begin C++14 tests.
#ifndef __cpp_binary_literals
# error "__cpp_binary_literals"
#elif __cpp_binary_literals != 201304
# error "__cpp_binary_literals != 201304"
#endif
#ifndef __cpp_init_captures
# error "__cpp_init_captures"
#elif __cpp_init_captures != 201304
# error "__cpp_init_captures != 201304"
#endif
#ifndef __cpp_generic_lambdas
# error "__cpp_generic_lambdas"
#elif __cpp_generic_lambdas != 201304
# error "__cpp_generic_lambdas != 201304"
#endif
// TODO: Change 200704 to 201304 when C++14 constexpr goes in.
#ifndef __cpp_constexpr
# error "__cpp_constexpr"
#elif __cpp_constexpr != 200704
# error "__cpp_constexpr != 200704"
#endif
#ifndef __cpp_decltype_auto
# error "__cpp_decltype_auto"
#elif __cpp_decltype_auto != 201304
# error "__cpp_decltype_auto != 201304"
#endif
#ifndef __cpp_return_type_deduction
# error "__cpp_return_type_deduction"
#elif __cpp_return_type_deduction != 201304
# error "__cpp_return_type_deduction != 201304"
#endif
#ifndef __cpp_runtime_arrays
# error "__cpp_runtime_arrays"
#elif __cpp_runtime_arrays != 201304
# error "__cpp_runtime_arrays != 201304"
#endif
// Aggregate initializers not in yet.
#ifdef __cpp_aggregate_nsdmi
# error "__cpp_aggregate_nsdmi"
#endif
// Variable templates not in yet.
#ifdef __cpp_variable_templates
# error "__cpp_variable_templates"
#endif
#ifndef __cpp_digit_separators
# error "__cpp_digit_separators"
#elif __cpp_digit_separators != 201309
# error "__cpp_digit_separators != 201309"
#endif
#ifndef __cpp_attribute_deprecated
# error "__cpp_attribute_deprecated"
#elif __cpp_attribute_deprecated != 201309
# error "__cpp_attribute_deprecated != 201309"
#endif
// Sized deallocation not in yet.
#ifdef __cpp_sized_deallocation
# error "__cpp_sized_deallocation"
#endif
// Begin include checks.
// Check for __has_include macro.
#ifndef __has_include
# error "__has_include"
#endif
// Quoted complex.h should find at least the bracket version (use operator).
#if __has_include__ "complex.h"
#else
# error "complex.h"
#endif
// Try known bracket header (use operator).
#if __has_include__(<complex>)
#else
# error "<complex>"
#endif
// Define and use a macro to invoke the operator.
#define sluggo(TXT) __has_include__(TXT)
#if sluggo(<complex>)
#else
# error "<complex>"
#endif
#if ! sluggo(<complex>)
# error "<complex>"
#else
#endif
// Quoted complex.h should find at least the bracket version.
#if __has_include("complex.h")
#else
# error "complex.h"
#endif
// Try known local quote header.
#if __has_include("complex_literals.h")
#else
# error "\"complex_literals.h\""
#endif
// Try nonexistent bracket header.
#if __has_include(<stuff>)
# error "<stuff>"
#else
#endif
// Try nonexistent quote header.
#if __has_include("phlegm")
# error "\"phlegm\""
#else
#endif
// Test __has_include_next.
#if __has_include("phoobhar.h")
# include "phoobhar.h"
#else
# error "__has_include(\"phoobhar.h\")"
#endif
// Try a macro.
#define COMPLEX_INC "complex.h"
#if __has_include(COMPLEX_INC)
#else
# error COMPLEX_INC
#endif
// Realistic use of __has_include.
#if __has_include(<array>)
# define STD_ARRAY 1
# include <array>
template<typename _Tp, size_t _Num>
using array = std::array<_Tp, _Num>;
#elif __has_include(<tr1/array>)
# define TR1_ARRAY 1
# include <tr1/array>
template<typename _Tp, size_t _Num>
typedef std::tr1::array<_Tp, _Num> array;
#endif