| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <lib/stdcompat/version.h> |
| |
| #include <gtest/gtest.h> |
| |
| namespace { |
| |
| #if __cplusplus > 201703L |
| |
| TEST(VersionTest, FeatureTestMacrosForCpp20) { |
| #if __cplusplus >= 201803L |
| // TODO(fxb/67616): This is not necessarily true with the state of C++20 implementations now. |
| // static_assert(__cpp_lib_string_view == 201803L); |
| #else |
| static_assert(__cpp_lib_string_view == 201606L); |
| #endif |
| |
| static_assert(__cpp_lib_logical_traits == 201510L); |
| static_assert(__cpp_lib_void_t == 201411L); |
| static_assert(__cpp_lib_optional == 201606L, |
| "'__cpp_optional_lib' should be using draft 201606L in std20."); |
| } |
| |
| #elif __cplusplus > 201402L |
| |
| TEST(VersionTest, FeatureTestMacrosForCpp17) { |
| #if __cplusplus >= 201606L |
| static_assert(__cpp_lib_string_view == 201606L); |
| #endif |
| #if __cplusplus >= 201510L |
| static_assert(__cpp_lib_logical_traits == 201510L); |
| #endif |
| #if __cplusplus >= 201411L |
| static_assert(__cpp_lib_void_t == 201411L); |
| #endif |
| #if __cplusplus >= 201606L |
| static_assert(__cpp_lib_optional == 201606L, |
| "'__cpp_lib_optional' should be using draft 201606L in std17."); |
| #endif |
| } |
| |
| #elif __cplusplus > 201103L |
| |
| TEST(VersionTest, FeatureTestMacrosForCpp14) { |
| #if defined(__cpp_lib_string_view) |
| static_assert(false, "'__cpp_lib_string_view' should not be defined in c++14."); |
| #endif |
| #if defined(__cpp_lib_logical_traits) |
| static_assert(false, "'__cpp_lib_logical_traits' should not be defined in c++14."); |
| #endif |
| #if defined(__cpp_lib_void_t) |
| static_assert(false, "'__cpp_lib_void_t' should not be defined in c++14."); |
| #endif |
| #if defined(__cpp_lib_optional) |
| static_assert(false, "'__cpp_lib_optional' should not be defined in std14.") |
| #endif |
| } |
| #endif |
| |
| } // namespace |