はじめに(Introduction)
N4910 Working Draft, Standard for Programming Language C++
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/n4910.pdf
n4910は、ISO/IEC JTC1 SC22 WG21の作業原案(Working Draft)です。
公式のISO/IEC 14882原本ではありません。
ISO/IEC JTC1 SC22 WG21では、可能な限り作業文書を公開し、幅広い意見を求めています。
一連の記事はコード断片をコンパイルできる形にする方法を検討してコンパイル、リンク、実行して、規格案の原文と処理系(g++, Clang++)との違いを確認し、技術内容を検討し、ISO/IEC JTC1 SC22 WG21にフィードバックするために用います。
また、CERT C++, MISRA C++等のコーディング標準のコード断片をコンパイルする際の参考にさせていただこうと考えています。CERT C++, MISRA C++が標準化の動きとの時間的なずれがあれば確認できれば幸いです。また、boostライブラリとの関連、Linux OS, TOPPERSカーネル、g++(GCC), clang++(LLVM)との関係も調査中です。
何か、抜け漏れ、耳より情報がありましたらおしらせくださると幸いです。
<この項は書きかけです。順次追記します。>
背景(back ground)
C/C++でコンパイルエラーが出ると、途方にくれることがしばしばあります。
何回かに1回は、該当するエラーが検索できます。
ただ、条件が違っていて、そこでの修正方法では目的を達成しないこともしばしばです。いろいろな条件のコンパイルエラーとその対応方法について、広く記録することによって、いつか同じエラーに遭遇した時にやくに立つことを目指しています。
この半年の間で、三度、自分のネットでの記録に助けられたことがあります。
また過去に解決できなかった記録を10種類以上、最近になって解決できたことがあります。それは、主に次の3つの情報に基づいています。
https://stackoverflow.com
https://cpprefjp.github.io
http://ja.cppreference.com/
また
https://researchmap.jp/joub9b3my-1797580/#_1797580
に記載したサイトのお世話になっています。
作業方針(sequence)
Clang++では-std=c++03, C++2bの2種類
g++では-std=c++03, c++2bの2種類
でコンパイルし、
1)コンパイルエラーを収集する。
2)コンパイルエラーをなくす方法を検討する。
コンパイルエラーになる例を示すだけが目的のコードは、コンパイルエラーをなくすのではなく、コンパイルエラーの種類を収集するだけにする。
文法を示すのが目的のコード場合に、コンパイルエラーをなくすのに手間がかかる場合は、順次作業します。
3)リンクエラーをなくす方法を検討する。
文法を示すのが目的のコード場合に、リンクエラーをなくすのに手間がかかる場合は、順次作業します。
4)意味のある出力を作る。
コンパイル、リンクが通っても、意味のある出力を示そうとすると、コンパイル・リンクエラーが出て収拾できそうにない場合がある。順次作業します。
1)だけのものから4)まで進んだものと色々ある状態です。一歩でも前に進むご助言をお待ちしています。「検討事項」の欄に現状を記録するようにしています。
C++N4910:2022 Standard Working Draft on ISO/IEC 14882(0) sample code compile list
C++N4741, 2018 Standard Working Draft on ISO/IEC 14882 sample code compile list
C++N4606, 2016符号断片編纂一覧(example code compile list)
C++N4606, 2016 Working Draft 2016, ISO/IEC 14882, C++ standard(1) Example code compile list
https://qiita.com/kaizen_nagoya/items/df5d62c35bd6ed1c3d43/
C++N3242, 2011 sample code compile list on clang++ and g++
編纂器(Compiler)
clang++ --version
Debian clang version 14.0.5-++20220610033153+c12386ae247c-1~exp1~20220610153237.151
Target: x86_64-pc-linux-gnu, Thread model: posix, InstalledDir: /usr/bin
g++- --version
g++ (GCC) 12.1.0 Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21.3.3 Header synopsis [meta.type.synop] C++N4910:2022 (506) p635.cpp
算譜(source code)
// C++N4910 Committee Draft, Standard for Programming Language C++
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/n4910.pdf
const char * n4910 = " 21.3.3 Header <type_traits> synopsis [meta.type.synop] C++N4910:2022 (506) p635.cpp";
// Debian clang version 14.0.5-++20220610033153+c12386ae247c-
// g++ (GCC) 12.1.0 Copyright (C) 2022 Free Software Foundation, Inc.
// Edited by Dr. OGAWA Kiyoshi. Compile procedure and results record.
// C++N4910:2022 Standard Working Draft on ISO/IEC 14882(0) sample code compile list
// https://qiita.com/kaizen_nagoya/items/fc957ddddd402004bb91
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cassert>
#include <coroutine>
#include <vector>
#include <complex>
#include <map>
#include <atomic>
#include <unordered_map>
#include <memory>
#include <typeinfo>
using namespace std;
// Example 1
namespace std {
// 21.3.4, helper class
template<class T, T v> struct integral_constant;
template<bool B>
using bool_constant = integral_constant<bool, B>;
using true_type = bool_constant<true>;
using false_type = bool_constant<false>;
// 21.3.5.2, primary type categories
template<class T> struct is_void;
template<class T> struct is_null_pointer; template<class T> struct is_integral;
template<class T> struct is_floating_point; template<class T> struct is_array;
template<class T> struct is_pointer;
template<class T> struct is_lvalue_reference; template<class T> struct is_rvalue_reference; template<class T> struct is_member_object_pointer; template<class T> struct is_member_function_pointer; template<class T> struct is_enum;
template<class T> struct is_union;
template<class T> struct is_class;
template<class T> struct is_function;
// 21.3.5.3, composite type categories
template<class T> struct is_reference; template<class T> struct is_arithmetic; template<class T> struct is_fundamental; template<class T> struct is_object; template<class T> struct is_scalar; template<class T> struct is_compound;
template<class T> struct is_member_pointer;
// 21.3.5.4, type properties
template<class T> struct is_const; template<class T> struct is_volatile; template<class T> struct is_trivial; template<class T> struct is_trivially_copyable; template<class T> struct is_standard_layout; template<class T> struct is_empty; template<class T> struct is_polymorphic; template<class T> struct is_abstract; template<class T> struct is_final; template<class T> struct is_aggregate;
template<class T> struct is_signed;
template<class T> struct is_unsigned;
template<class T> struct is_bounded_array;
template<class T> struct is_unbounded_array;
template<class T> struct is_scoped_enum;
template<class T, class... Args> struct is_constructible;
template<class T> struct is_default_constructible;
template<class T> struct is_copy_constructible;
template<class T> struct is_move_constructible;
template<class T, class U> struct is_assignable;
template<class T> struct is_copy_assignable;
template<class T> struct is_move_assignable;
template<class T, class U> struct is_swappable_with;
template<class T> struct is_swappable;
template<class T> struct is_destructible;
template<class T, class... Args> struct is_trivially_constructible;
template<class T> struct is_trivially_default_constructible;
template<class T> struct is_trivially_copy_constructible;
template<class T> struct is_trivially_move_constructible;
template<class T, class U> struct is_trivially_assignable;
template<class T> struct is_trivially_copy_assignable;
template<class T> struct is_trivially_move_assignable;
template<class T> struct is_trivially_destructible;
template<class T, class... Args> struct is_nothrow_constructible;
template<class T> struct is_nothrow_default_constructible;
template<class T> struct is_nothrow_copy_constructible;
template<class T> struct is_nothrow_move_constructible;
template<class T, class U> struct is_nothrow_assignable;
template<class T> struct is_nothrow_copy_assignable;
template<class T> struct is_nothrow_move_assignable;
template<class T, class U> struct is_nothrow_swappable_with;
template<class T> struct is_nothrow_swappable;
template<class T> struct is_nothrow_destructible;
template<class T> struct has_virtual_destructor;
template<class T> struct has_unique_object_representations;
template<class T, class U> struct reference_constructs_from_temporary;
template<class T, class U> struct reference_converts_from_temporary;
// 21.3.6, type property queries
template<class T> struct alignment_of; template<class T> struct rank;
template<class T, unsigned I = 0> struct extent;
// 21.3.7, type relations
template<class T, class U> struct is_same;
template<class Base, class Derived> struct is_base_of;
template<class From, class To> struct is_convertible;
template<class From, class To> struct is_nothrow_convertible;
template<class T, class U> struct is_layout_compatible;
template<class Base, class Derived> struct is_pointer_interconvertible_base_of;
template<class Fn, class... ArgTypes> struct is_invocable;
template<class R, class Fn, class... ArgTypes> struct is_invocable_r;
template<class Fn, class... ArgTypes> struct is_nothrow_invocable;
template<class R, class Fn, class... ArgTypes> struct is_nothrow_invocable_r;
// 21.3.8.2, const-volatile modifications
template<class T> struct remove_const; template<class T> struct remove_volatile; template<class T> struct remove_cv; template<class T> struct add_const; template<class T> struct add_volatile; template<class T> struct add_cv;
template<class T>
using remove_const_t = typename remove_const<T>::type;
template<class T>
using remove_volatile_t = typename remove_volatile<T>::type;
template<class T>
using remove_cv_t = typename remove_cv<T>::type;
template<class T>
using add_const_t = typename add_const<T>::type;
template<class T>
using add_volatile_t = typename add_volatile<T>::type;
template<class T>
using add_cv_t = typename add_cv<T>::type;
// 21.3.8.3, reference modifications
template<class T> struct remove_reference; template<class T> struct add_lvalue_reference; template<class T> struct add_rvalue_reference;
template<class T>
using remove_reference_t = typename remove_reference<T>::type;
template<class T>
using add_lvalue_reference_t = typename add_lvalue_reference<T>::type;
template<class T>
using add_rvalue_reference_t = typename add_rvalue_reference<T>::type;
// 21.3.8.4, sign modifications
template<class T> struct make_signed;
template<class T> struct make_unsigned;
template<class T>
using make_signed_t = typename make_signed<T>::type;
template<class T>
using make_unsigned_t = typename make_unsigned<T>::type;
// 21.3.8.5, array modifications
template<class T> struct remove_extent; template<class T> struct remove_all_extents;
template<class T>
using remove_extent_t = typename remove_extent<T>::type;
template<class T>
using remove_all_extents_t = typename remove_all_extents<T>::type;
// 21.3.8.6, pointer modifications
template<class T> struct remove_pointer; template<class T> struct add_pointer;
template<class T>
using remove_pointer_t = typename remove_pointer<T>::type;
template<class T>
using add_pointer_t = typename add_pointer<T>::type;
// 21.3.8.7, other transformations
template<class T> struct type_identity;
template<class T> struct remove_cvref;
template<class T> struct decay;
template<bool, class T = void> struct enable_if;
template<bool, class T, class F> struct conditional;
template<class... T> struct common_type;
template<class T, class U, template<class> class TQual, template<class> class UQual>
struct basic_common_reference { };
template<class... T> struct common_reference;
template<class T> struct underlying_type;
template<class Fn, class... ArgTypes> struct invoke_result;
template<class T> struct unwrap_reference;
template<class T> struct unwrap_ref_decay;
template<class T>
using type_identity_t = typename type_identity<T>::type;
template<class T>
using remove_cvref_t = typename remove_cvref<T>::type;
template<class T>
using decay_t = typename decay<T>::type;
template<bool b, class T = void>
using enable_if_t = typename enable_if<b, T>::type;
template<bool b, class T, class F>
using conditional_t = typename conditional<b, T, F>::type;
template<class... T>
using common_type_t = typename common_type<T...>::type;
template<class... T>
using common_reference_t = typename common_reference<T...>::type;
template<class T>
using underlying_type_t = typename underlying_type<T>::type;
template<class Fn, class... ArgTypes>
using invoke_result_t = typename invoke_result<Fn, ArgTypes...>::type;
template<class T>
using unwrap_reference_t = typename unwrap_reference<T>::type;
template<class T>
using unwrap_ref_decay_t = typename unwrap_ref_decay<T>::type;
template<class...>
using void_t = void;
// 21.3.9, logical operator traits
template<class... B> struct conjunction; template<class... B> struct disjunction; template<class B> struct negation;
// 21.3.5.2, primary type categories
template<class T>
inline constexpr bool is_void_v = is_void<T>::value;
template<class T>
inline constexpr bool is_null_pointer_v = is_null_pointer<T>::value;
template<class T>
inline constexpr bool is_integral_v = is_integral<T>::value;
template<class T>
inline constexpr bool is_floating_point_v = is_floating_point<T>::value;
template<class T>
inline constexpr bool is_array_v = is_array<T>::value;
template<class T>
inline constexpr bool is_pointer_v = is_pointer<T>::value;
template<class T>
inline constexpr bool is_lvalue_reference_v = is_lvalue_reference<T>::value;
template<class T>
inline constexpr bool is_rvalue_reference_v = is_rvalue_reference<T>::value;
template<class T>
inline constexpr bool is_member_object_pointer_v = is_member_object_pointer<T>::value;
template<class T>
inline constexpr bool is_member_function_pointer_v = is_member_function_pointer<T>::value;
template<class T>
inline constexpr bool is_enum_v = is_enum<T>::value;
template<class T>
inline constexpr bool is_union_v = is_union<T>::value;
template<class T>
inline constexpr bool is_class_v = is_class<T>::value;
template<class T>
inline constexpr bool is_function_v = is_function<T>::value;
// 21.3.5.3, composite type categories
template<class T>
inline constexpr bool is_reference_v = is_reference<T>::value;
template<class T>
inline constexpr bool is_arithmetic_v = is_arithmetic<T>::value;
template<class T>
inline constexpr bool is_fundamental_v = is_fundamental<T>::value;
template<class T>
inline constexpr bool is_object_v = is_object<T>::value;
template<class T>
inline constexpr bool is_scalar_v = is_scalar<T>::value;
template<class T>
inline constexpr bool is_compound_v = is_compound<T>::value;
template<class T>
inline constexpr bool is_member_pointer_v = is_member_pointer<T>::value;
// 21.3.5.4, type properties
template<class T>
inline constexpr bool is_const_v = is_const<T>::value;
template<class T>
inline constexpr bool is_volatile_v = is_volatile<T>::value;
template<class T>
inline constexpr bool is_trivial_v = is_trivial<T>::value;
template<class T>
inline constexpr bool is_trivially_copyable_v = is_trivially_copyable<T>::value;
template<class T>
inline constexpr bool is_standard_layout_v = is_standard_layout<T>::value;
template<class T>
inline constexpr bool is_empty_v = is_empty<T>::value;
template<class T>
inline constexpr bool is_polymorphic_v = is_polymorphic<T>::value;
template<class T>
inline constexpr bool is_abstract_v = is_abstract<T>::value;
template<class T>
inline constexpr bool is_final_v = is_final<T>::value;
template<class T>
inline constexpr bool is_aggregate_v = is_aggregate<T>::value;
template<class T>
inline constexpr bool is_signed_v = is_signed<T>::value;
template<class T>
inline constexpr bool is_unsigned_v = is_unsigned<T>::value;
template<class T>
inline constexpr bool is_bounded_array_v = is_bounded_array<T>::value;
template<class T>
inline constexpr bool is_unbounded_array_v = is_unbounded_array<T>::value;
template<class T>
inline constexpr bool is_scoped_enum_v = is_scoped_enum<T>::value;
template<class T, class... Args>
inline constexpr bool is_constructible_v = is_constructible<T, Args...>::value;
template<class T>
inline constexpr bool is_default_constructible_v = is_default_constructible<T>::value;
template<class T>
inline constexpr bool is_copy_constructible_v = is_copy_constructible<T>::value;
template<class T>
inline constexpr bool is_move_constructible_v = is_move_constructible<T>::value;
template<class T, class U>
inline constexpr bool is_assignable_v = is_assignable<T, U>::value;
template<class T>
inline constexpr bool is_copy_assignable_v = is_copy_assignable<T>::value;
template<class T>
inline constexpr bool is_move_assignable_v = is_move_assignable<T>::value;
template<class T, class U>
inline constexpr bool is_swappable_with_v = is_swappable_with<T, U>::value;
template<class T>
inline constexpr bool is_swappable_v = is_swappable<T>::value;
template<class T>
inline constexpr bool is_destructible_v = is_destructible<T>::value;
template<class T, class... Args>
inline constexpr bool is_trivially_constructible_v
= is_trivially_constructible<T, Args...>::value;
template<class T>
inline constexpr bool is_trivially_default_constructible_v
= is_trivially_default_constructible<T>::value;
template<class T>
inline constexpr bool is_trivially_copy_constructible_v
= is_trivially_copy_constructible<T>::value;
template<class T>
inline constexpr bool is_trivially_move_constructible_v
= is_trivially_move_constructible<T>::value;
template<class T, class U>
inline constexpr bool is_trivially_assignable_v = is_trivially_assignable<T, U>::value;
template<class T>
inline constexpr bool is_trivially_copy_assignable_v
= is_trivially_copy_assignable<T>::value;
template<class T>
inline constexpr bool is_trivially_move_assignable_v
= is_trivially_move_assignable<T>::value;
template<class T>
inline constexpr bool is_trivially_destructible_v = is_trivially_destructible<T>::value;
template<class T, class... Args>
inline constexpr bool is_nothrow_constructible_v
= is_nothrow_constructible<T, Args...>::value;
template<class T>
inline constexpr bool is_nothrow_default_constructible_v
= is_nothrow_default_constructible<T>::value;
template<class T>
inline constexpr bool is_nothrow_copy_constructible_v
= is_nothrow_copy_constructible<T>::value;
template<class T>
inline constexpr bool is_nothrow_move_constructible_v
= is_nothrow_move_constructible<T>::value;
template<class T, class U>
inline constexpr bool is_nothrow_assignable_v = is_nothrow_assignable<T, U>::value;
template<class T>
inline constexpr bool is_nothrow_copy_assignable_v = is_nothrow_copy_assignable<T>::value;
template<class T>
inline constexpr bool is_nothrow_move_assignable_v = is_nothrow_move_assignable<T>::value;
template<class T, class U>
inline constexpr bool is_nothrow_swappable_with_v = is_nothrow_swappable_with<T, U>::value;
template<class T>
inline constexpr bool is_nothrow_swappable_v = is_nothrow_swappable<T>::value;
template<class T>
inline constexpr bool is_nothrow_destructible_v = is_nothrow_destructible<T>::value;
template<class T>
inline constexpr bool has_virtual_destructor_v = has_virtual_destructor<T>::value;
template<class T>
inline constexpr bool has_unique_object_representations_v
= has_unique_object_representations<T>::value;
template<class T, class U>
inline constexpr bool reference_constructs_from_temporary_v
= reference_constructs_from_temporary<T, U>::value;
template<class T, class U>
inline constexpr bool reference_converts_from_temporary_v
= reference_converts_from_temporary<T, U>::value;
// 21.3.6, type property queries
template<class T>
inline constexpr size_t alignment_of_v = alignment_of<T>::value;
template<class T>
inline constexpr size_t rank_v = rank<T>::value;
template<class T, unsigned I = 0>
inline constexpr size_t extent_v = extent<T, I>::value;
// 21.3.7, type relations
template<class T, class U>
inline constexpr bool is_same_v = is_same<T, U>::value;
template<class Base, class Derived>
inline constexpr bool is_base_of_v = is_base_of<Base, Derived>::value;
template<class From, class To>
inline constexpr bool is_convertible_v = is_convertible<From, To>::value;
template<class From, class To>
inline constexpr bool is_nothrow_convertible_v = is_nothrow_convertible<From, To>::value;
template<class T, class U>
inline constexpr bool is_layout_compatible_v = is_layout_compatible<T, U>::value;
template<class Base, class Derived>
inline constexpr bool is_pointer_interconvertible_base_of_v
= is_pointer_interconvertible_base_of<Base, Derived>::value;
template<class Fn, class... ArgTypes>
inline constexpr bool is_invocable_v = is_invocable<Fn, ArgTypes...>::value;
template<class R, class Fn, class... ArgTypes>
inline constexpr bool is_invocable_r_v = is_invocable_r<R, Fn, ArgTypes...>::value;
template<class Fn, class... ArgTypes>
inline constexpr bool is_nothrow_invocable_v = is_nothrow_invocable<Fn, ArgTypes...>::value;
template<class R, class Fn, class... ArgTypes>
inline constexpr bool is_nothrow_invocable_r_v
= is_nothrow_invocable_r<R, Fn, ArgTypes...>::value;
// 21.3.9, logical operator traits
template<class... B>
inline constexpr bool conjunction_v = conjunction<B...>::value;
template<class... B>
inline constexpr bool disjunction_v = disjunction<B...>::value;
template<class B>
inline constexpr bool negation_v = negation<B>::value;
// 21.3.10, member relationships template<class S, class M>
constexpr bool is_pointer_interconvertible_with_class(M S::*m) noexcept;
template<class S1, class S2, class M1, class M2>
constexpr bool is_corresponding_member(M1 S1::*m1, M2 S2::*m2) noexcept;
// 21.3.11, constant evaluation context
constexpr bool is_constant_evaluated() noexcept;
}
int main(){
cout << n4910 << endl;
return EXIT_SUCCESS;
}
編纂・実行結果(compile and go)
$ clang++ p635.cpp -std=03 -o p635l -I. -Wall
In file included from p635.cpp:19:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/atomic:38:
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/c++0x_warning.h:32:2: error: This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
#error This file requires compiler and library support \
^
p635.cpp:31:29: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using bool_constant = integral_constant<bool, B>;
^
p635.cpp:32:24: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using true_type = bool_constant<true>;
^
p635.cpp:33:24: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using false_type = bool_constant<false>;
^
p635.cpp:53:24: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class T, class... Args> struct is_constructible;
^
p635.cpp:63:24: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class T, class... Args> struct is_trivially_constructible;
^
p635.cpp:71:24: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class T, class... Args> struct is_nothrow_constructible;
^
p635.cpp:95:25: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class Fn, class... ArgTypes> struct is_invocable;
^
p635.cpp:96:34: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class R, class Fn, class... ArgTypes> struct is_invocable_r;
^
p635.cpp:97:25: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class Fn, class... ArgTypes> struct is_nothrow_invocable;
^
p635.cpp:98:34: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class R, class Fn, class... ArgTypes> struct is_nothrow_invocable_r;
^
p635.cpp:102:29: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using remove_const_t = typename remove_const<T>::type;
^
p635.cpp:104:29: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using remove_volatile_t = typename remove_volatile<T>::type;
^
p635.cpp:106:23: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using remove_cv_t = typename remove_cv<T>::type;
^
p635.cpp:108:23: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using add_const_t = typename add_const<T>::type;
^
p635.cpp:110:26: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using add_volatile_t = typename add_volatile<T>::type;
^
p635.cpp:112:20: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using add_cv_t = typename add_cv<T>::type;
^
p635.cpp:116:34: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using remove_reference_t = typename remove_reference<T>::type;
^
p635.cpp:118:34: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using add_lvalue_reference_t = typename add_lvalue_reference<T>::type;
^
p635.cpp:120:34: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using add_rvalue_reference_t = typename add_rvalue_reference<T>::type;
^
p635.cpp:125:27: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using make_signed_t = typename make_signed<T>::type;
^
p635.cpp:127:27: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using make_unsigned_t = typename make_unsigned<T>::type;
^
p635.cpp:131:32: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using remove_extent_t = typename remove_extent<T>::type;
^
p635.cpp:133:32: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using remove_all_extents_t = typename remove_all_extents<T>::type;
^
p635.cpp:137:28: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using remove_pointer_t = typename remove_pointer<T>::type;
^
p635.cpp:139:28: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using add_pointer_t = typename add_pointer<T>::type;
^
p635.cpp:146:15: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class... T> struct common_type;
^
p635.cpp:149:15: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class... T> struct common_reference;
^
p635.cpp:151:25: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class Fn, class... ArgTypes> struct invoke_result;
^
p635.cpp:155:27: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using type_identity_t = typename type_identity<T>::type;
^
p635.cpp:157:26: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using remove_cvref_t = typename remove_cvref<T>::type;
^
p635.cpp:159:19: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using decay_t = typename decay<T>::type;
^
p635.cpp:161:30: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using enable_if_t = typename enable_if<b, T>::type;
^
p635.cpp:163:30: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using conditional_t = typename conditional<b, T, F>::type;
^
p635.cpp:164:15: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class... T>
^
p635.cpp:165:30: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using common_type_t = typename common_type<T...>::type;
^
p635.cpp:166:15: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class... T>
^
p635.cpp:167:30: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using common_reference_t = typename common_reference<T...>::type;
^
p635.cpp:169:30: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using underlying_type_t = typename underlying_type<T>::type;
^
p635.cpp:170:25: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class Fn, class... ArgTypes>
^
p635.cpp:171:30: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using invoke_result_t = typename invoke_result<Fn, ArgTypes...>::type;
^
p635.cpp:173:30: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using unwrap_reference_t = typename unwrap_reference<T>::type;
^
p635.cpp:175:30: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using unwrap_ref_decay_t = typename unwrap_ref_decay<T>::type;
^
p635.cpp:176:15: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class...>
^
p635.cpp:177:30: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
using void_t = void;
^
p635.cpp:179:15: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class... B> struct conjunction; template<class... B> struct disjunction; template<class B> struct negation;
^
p635.cpp:179:56: warning: variadic templates are a C++11 extension [-Wc++11-extensions]
template<class... B> struct conjunction; template<class... B> struct disjunction; template<class B> struct negation;
^
p635.cpp:182:10: error: unknown type name 'constexpr'
inline constexpr bool is_void_v = is_void<T>::value;
^
p635.cpp:182:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
inline constexpr bool is_void_v = is_void<T>::value;
^
p635.cpp:182:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
inline constexpr bool is_void_v = is_void<T>::value;
^
p635.cpp:184:10: error: unknown type name 'constexpr'
inline constexpr bool is_null_pointer_v = is_null_pointer<T>::value;
^
p635.cpp:184:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
inline constexpr bool is_null_pointer_v = is_null_pointer<T>::value;
^
p635.cpp:184:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
inline constexpr bool is_null_pointer_v = is_null_pointer<T>::value;
^
p635.cpp:186:10: error: unknown type name 'constexpr'
inline constexpr bool is_integral_v = is_integral<T>::value;
^
p635.cpp:186:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
inline constexpr bool is_integral_v = is_integral<T>::value;
^
p635.cpp:186:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
inline constexpr bool is_integral_v = is_integral<T>::value;
^
p635.cpp:188:10: error: unknown type name 'constexpr'
inline constexpr bool is_floating_point_v = is_floating_point<T>::value;
^
p635.cpp:188:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
inline constexpr bool is_floating_point_v = is_floating_point<T>::value;
^
p635.cpp:188:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
inline constexpr bool is_floating_point_v = is_floating_point<T>::value;
^
p635.cpp:190:10: error: unknown type name 'constexpr'
inline constexpr bool is_array_v = is_array<T>::value;
^
p635.cpp:190:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
inline constexpr bool is_array_v = is_array<T>::value;
^
p635.cpp:190:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
inline constexpr bool is_array_v = is_array<T>::value;
^
p635.cpp:192:10: error: unknown type name 'constexpr'
inline constexpr bool is_pointer_v = is_pointer<T>::value;
^
p635.cpp:192:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
inline constexpr bool is_pointer_v = is_pointer<T>::value;
^
p635.cpp:192:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
inline constexpr bool is_pointer_v = is_pointer<T>::value;
^
p635.cpp:194:10: error: unknown type name 'constexpr'
inline constexpr bool is_lvalue_reference_v = is_lvalue_reference<T>::value;
^
p635.cpp:194:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
inline constexpr bool is_lvalue_reference_v = is_lvalue_reference<T>::value;
^
p635.cpp:194:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
inline constexpr bool is_lvalue_reference_v = is_lvalue_reference<T>::value;
^
p635.cpp:196:10: error: unknown type name 'constexpr'
inline constexpr bool is_rvalue_reference_v = is_rvalue_reference<T>::value;
^
p635.cpp:196:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
inline constexpr bool is_rvalue_reference_v = is_rvalue_reference<T>::value;
^
p635.cpp:196:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
inline constexpr bool is_rvalue_reference_v = is_rvalue_reference<T>::value;
^
p635.cpp:198:10: error: unknown type name 'constexpr'
inline constexpr bool is_member_object_pointer_v = is_member_object_pointer<T>::value;
^
p635.cpp:198:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
inline constexpr bool is_member_object_pointer_v = is_member_object_pointer<T>::value;
^
p635.cpp:198:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
inline constexpr bool is_member_object_pointer_v = is_member_object_pointer<T>::value;
^
p635.cpp:200:10: error: unknown type name 'constexpr'
inline constexpr bool is_member_function_pointer_v = is_member_function_pointer<T>::value;
^
p635.cpp:200:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
inline constexpr bool is_member_function_pointer_v = is_member_function_pointer<T>::value;
^
p635.cpp:200:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
inline constexpr bool is_member_function_pointer_v = is_member_function_pointer<T>::value;
^
p635.cpp:202:10: error: unknown type name 'constexpr'
inline constexpr bool is_enum_v = is_enum<T>::value;
^
p635.cpp:202:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
inline constexpr bool is_enum_v = is_enum<T>::value;
^
p635.cpp:202:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
inline constexpr bool is_enum_v = is_enum<T>::value;
^
p635.cpp:204:10: error: unknown type name 'constexpr'
inline constexpr bool is_union_v = is_union<T>::value;
^
p635.cpp:204:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
inline constexpr bool is_union_v = is_union<T>::value;
^
p635.cpp:204:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
inline constexpr bool is_union_v = is_union<T>::value;
^
p635.cpp:206:10: error: unknown type name 'constexpr'
inline constexpr bool is_class_v = is_class<T>::value;
^
p635.cpp:206:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
inline constexpr bool is_class_v = is_class<T>::value;
^
p635.cpp:206:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
inline constexpr bool is_class_v = is_class<T>::value;
^
p635.cpp:208:10: error: unknown type name 'constexpr'
inline constexpr bool is_function_v = is_function<T>::value;
^
p635.cpp:208:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
inline constexpr bool is_function_v = is_function<T>::value;
^
p635.cpp:208:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
inline constexpr bool is_function_v = is_function<T>::value;
^
p635.cpp:211:10: error: unknown type name 'constexpr'
inline constexpr bool is_reference_v = is_reference<T>::value;
^
p635.cpp:211:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
inline constexpr bool is_reference_v = is_reference<T>::value;
^
p635.cpp:211:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
inline constexpr bool is_reference_v = is_reference<T>::value;
^
p635.cpp:213:10: error: unknown type name 'constexpr'
inline constexpr bool is_arithmetic_v = is_arithmetic<T>::value;
^
p635.cpp:213:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
inline constexpr bool is_arithmetic_v = is_arithmetic<T>::value;
^
p635.cpp:213:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
inline constexpr bool is_arithmetic_v = is_arithmetic<T>::value;
^
p635.cpp:215:10: error: unknown type name 'constexpr'
inline constexpr bool is_fundamental_v = is_fundamental<T>::value;
^
p635.cpp:215:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
inline constexpr bool is_fundamental_v = is_fundamental<T>::value;
^
p635.cpp:215:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
inline constexpr bool is_fundamental_v = is_fundamental<T>::value;
^
p635.cpp:217:10: error: unknown type name 'constexpr'
inline constexpr bool is_object_v = is_object<T>::value;
^
p635.cpp:217:25: warning: variable templates are a C++14 extension [-Wc++14-extensions]
inline constexpr bool is_object_v = is_object<T>::value;
^
p635.cpp:217:3: warning: inline variables are a C++17 extension [-Wc++17-extensions]
inline constexpr bool is_object_v = is_object<T>::value;
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
82 warnings and 20 errors generated.
$ clang++ p635.cpp -std=2b -o p635l -I. -Wall
p635.cpp:87:32: error: template parameter redefines default argument
template<class T, unsigned I = 0> struct extent;
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:781:33: note: previous default template argument defined here
template<typename, unsigned = 0>
^
p635.cpp:144:26: error: template parameter redefines default argument
template<bool, class T = void> struct enable_if;
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:2181:33: note: previous default template argument defined here
template<bool, typename _Tp = void>
^
p635.cpp:148:10: error: redefinition of 'basic_common_reference'
struct basic_common_reference { };
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3345:12: note: previous definition is here
struct basic_common_reference
^
p635.cpp:157:9: error: type alias template redefinition with different types ('typename remove_cvref<T>::type' vs '__remove_cvref_t<_Tp>' (aka 'typename remove_cv<typename remove_reference<type-parameter-0-0>::type>::type'))
using remove_cvref_t = typename remove_cvref<T>::type;
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3235:11: note: previous definition is here
using remove_cvref_t = __remove_cvref_t<_Tp>;
^
p635.cpp:160:28: error: template parameter redefines default argument
template<bool b, class T = void>
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:2553:39: note: previous default template argument defined here
template<bool _Cond, typename _Tp = void>
^
p635.cpp:182:25: error: redefinition of 'is_void_v'
inline constexpr bool is_void_v = is_void<T>::value;
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3027:25: note: previous definition is here
inline constexpr bool is_void_v = is_void<_Tp>::value;
^
p635.cpp:184:25: error: redefinition of 'is_null_pointer_v'
inline constexpr bool is_null_pointer_v = is_null_pointer<T>::value;
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3029:25: note: previous definition is here
inline constexpr bool is_null_pointer_v = is_null_pointer<_Tp>::value;
^
p635.cpp:186:25: error: redefinition of 'is_integral_v'
inline constexpr bool is_integral_v = is_integral<T>::value;
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3031:25: note: previous definition is here
inline constexpr bool is_integral_v = is_integral<_Tp>::value;
^
p635.cpp:188:25: error: redefinition of 'is_floating_point_v'
inline constexpr bool is_floating_point_v = is_floating_point<T>::value;
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3033:25: note: previous definition is here
inline constexpr bool is_floating_point_v = is_floating_point<_Tp>::value;
^
p635.cpp:190:25: error: redefinition of 'is_array_v'
inline constexpr bool is_array_v = is_array<T>::value;
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3035:25: note: previous definition is here
inline constexpr bool is_array_v = is_array<_Tp>::value;
^
p635.cpp:192:25: error: redefinition of 'is_pointer_v'
inline constexpr bool is_pointer_v = is_pointer<T>::value;
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3037:25: note: previous definition is here
inline constexpr bool is_pointer_v = is_pointer<_Tp>::value;
^
p635.cpp:194:25: error: redefinition of 'is_lvalue_reference_v'
inline constexpr bool is_lvalue_reference_v = is_lvalue_reference<T>::value;
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3039:25: note: previous definition is here
inline constexpr bool is_lvalue_reference_v =
^
p635.cpp:196:25: error: redefinition of 'is_rvalue_reference_v'
inline constexpr bool is_rvalue_reference_v = is_rvalue_reference<T>::value;
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3042:25: note: previous definition is here
inline constexpr bool is_rvalue_reference_v =
^
p635.cpp:198:25: error: redefinition of 'is_member_object_pointer_v'
inline constexpr bool is_member_object_pointer_v = is_member_object_pointer<T>::value;
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3045:25: note: previous definition is here
inline constexpr bool is_member_object_pointer_v =
^
p635.cpp:200:25: error: redefinition of 'is_member_function_pointer_v'
inline constexpr bool is_member_function_pointer_v = is_member_function_pointer<T>::value;
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3048:25: note: previous definition is here
inline constexpr bool is_member_function_pointer_v =
^
p635.cpp:202:25: error: redefinition of 'is_enum_v'
inline constexpr bool is_enum_v = is_enum<T>::value;
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3051:25: note: previous definition is here
inline constexpr bool is_enum_v = is_enum<_Tp>::value;
^
p635.cpp:204:25: error: redefinition of 'is_union_v'
inline constexpr bool is_union_v = is_union<T>::value;
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3053:25: note: previous definition is here
inline constexpr bool is_union_v = is_union<_Tp>::value;
^
p635.cpp:206:25: error: redefinition of 'is_class_v'
inline constexpr bool is_class_v = is_class<T>::value;
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3055:25: note: previous definition is here
inline constexpr bool is_class_v = is_class<_Tp>::value;
^
p635.cpp:208:25: error: redefinition of 'is_function_v'
inline constexpr bool is_function_v = is_function<T>::value;
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/type_traits:3057:25: note: previous definition is here
inline constexpr bool is_function_v = is_function<_Tp>::value;
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
$ g++ p635.cpp -std=03 -o p635g -I. -Wall
In file included from /usr/local/include/c++/12.1.0/atomic:38,
from p635.cpp:19:
/usr/local/include/c++/12.1.0/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
32 | #error This file requires compiler and library support \
| ^~~~~
p635.cpp:182:10: warning: identifier 'constexpr' is a keyword in C++11 [-Wc++11-compat]
182 | inline constexpr bool is_void_v = is_void<T>::value;
| ^~~~~~~~~
p635.cpp:370:70: warning: identifier 'noexcept' is a keyword in C++11 [-Wc++11-compat]
370 | constexpr bool is_pointer_interconvertible_with_class(M S::*m) noexcept;
| ^~~~~~~~
p635.cpp:31:7: error: expected unqualified-id before 'using'
31 | using bool_constant = integral_constant<bool, B>;
| ^~~~~
p635.cpp:32:11: error: expected nested-name-specifier before 'true_type'
32 | using true_type = bool_constant<true>;
| ^~~~~~~~~
p635.cpp:33:11: error: expected nested-name-specifier before 'false_type'
33 | using false_type = bool_constant<false>;
| ^~~~~~~~~~
p635.cpp:53:24: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
53 | template<class T, class... Args> struct is_constructible;
| ^~~
p635.cpp:63:24: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
63 | template<class T, class... Args> struct is_trivially_constructible;
| ^~~
p635.cpp:71:24: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
71 | template<class T, class... Args> struct is_nothrow_constructible;
| ^~~
p635.cpp:95:25: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
95 | template<class Fn, class... ArgTypes> struct is_invocable;
| ^~~
p635.cpp:96:34: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
96 | template<class R, class Fn, class... ArgTypes> struct is_invocable_r;
| ^~~
p635.cpp:97:25: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
97 | template<class Fn, class... ArgTypes> struct is_nothrow_invocable;
| ^~~
p635.cpp:98:34: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
98 | template<class R, class Fn, class... ArgTypes> struct is_nothrow_invocable_r;
| ^~~
p635.cpp:102:3: error: expected unqualified-id before 'using'
102 | using remove_const_t = typename remove_const<T>::type;
| ^~~~~
p635.cpp:104:3: error: expected unqualified-id before 'using'
104 | using remove_volatile_t = typename remove_volatile<T>::type;
| ^~~~~
p635.cpp:106:3: error: expected unqualified-id before 'using'
106 | using remove_cv_t = typename remove_cv<T>::type;
| ^~~~~
p635.cpp:108:3: error: expected unqualified-id before 'using'
108 | using add_const_t = typename add_const<T>::type;
| ^~~~~
p635.cpp:110:3: error: expected unqualified-id before 'using'
110 | using add_volatile_t = typename add_volatile<T>::type;
| ^~~~~
p635.cpp:112:3: error: expected unqualified-id before 'using'
112 | using add_cv_t = typename add_cv<T>::type;
| ^~~~~
p635.cpp:116:3: error: expected unqualified-id before 'using'
116 | using remove_reference_t = typename remove_reference<T>::type;
| ^~~~~
p635.cpp:118:3: error: expected unqualified-id before 'using'
118 | using add_lvalue_reference_t = typename add_lvalue_reference<T>::type;
| ^~~~~
p635.cpp:120:3: error: expected unqualified-id before 'using'
120 | using add_rvalue_reference_t = typename add_rvalue_reference<T>::type;
| ^~~~~
p635.cpp:125:3: error: expected unqualified-id before 'using'
125 | using make_signed_t = typename make_signed<T>::type;
| ^~~~~
p635.cpp:127:3: error: expected unqualified-id before 'using'
127 | using make_unsigned_t = typename make_unsigned<T>::type;
| ^~~~~
p635.cpp:131:3: error: expected unqualified-id before 'using'
131 | using remove_extent_t = typename remove_extent<T>::type;
| ^~~~~
p635.cpp:133:3: error: expected unqualified-id before 'using'
133 | using remove_all_extents_t = typename remove_all_extents<T>::type;
| ^~~~~
p635.cpp:137:3: error: expected unqualified-id before 'using'
137 | using remove_pointer_t = typename remove_pointer<T>::type;
| ^~~~~
p635.cpp:139:3: error: expected unqualified-id before 'using'
139 | using add_pointer_t = typename add_pointer<T>::type;
| ^~~~~
p635.cpp:146:15: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
146 | template<class... T> struct common_type;
| ^~~
p635.cpp:149:15: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
149 | template<class... T> struct common_reference;
| ^~~
p635.cpp:151:25: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
151 | template<class Fn, class... ArgTypes> struct invoke_result;
| ^~~
p635.cpp:155:3: error: expected unqualified-id before 'using'
155 | using type_identity_t = typename type_identity<T>::type;
| ^~~~~
p635.cpp:157:3: error: expected unqualified-id before 'using'
157 | using remove_cvref_t = typename remove_cvref<T>::type;
| ^~~~~
p635.cpp:159:3: error: expected unqualified-id before 'using'
159 | using decay_t = typename decay<T>::type;
| ^~~~~
p635.cpp:161:3: error: expected unqualified-id before 'using'
161 | using enable_if_t = typename enable_if<b, T>::type;
| ^~~~~
p635.cpp:163:3: error: expected unqualified-id before 'using'
163 | using conditional_t = typename conditional<b, T, F>::type;
| ^~~~~
p635.cpp:164:15: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
164 | template<class... T>
| ^~~
p635.cpp:165:3: error: expected unqualified-id before 'using'
165 | using common_type_t = typename common_type<T...>::type;
| ^~~~~
p635.cpp:166:15: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
166 | template<class... T>
| ^~~
p635.cpp:167:3: error: expected unqualified-id before 'using'
167 | using common_reference_t = typename common_reference<T...>::type;
| ^~~~~
p635.cpp:169:3: error: expected unqualified-id before 'using'
169 | using underlying_type_t = typename underlying_type<T>::type;
| ^~~~~
p635.cpp:170:25: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
170 | template<class Fn, class... ArgTypes>
| ^~~
p635.cpp:171:3: error: expected unqualified-id before 'using'
171 | using invoke_result_t = typename invoke_result<Fn, ArgTypes...>::type;
| ^~~~~
p635.cpp:173:3: error: expected unqualified-id before 'using'
173 | using unwrap_reference_t = typename unwrap_reference<T>::type;
| ^~~~~
p635.cpp:175:3: error: expected unqualified-id before 'using'
175 | using unwrap_ref_decay_t = typename unwrap_ref_decay<T>::type;
| ^~~~~
p635.cpp:176:15: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
176 | template<class...>
| ^~~
p635.cpp:177:3: error: expected unqualified-id before 'using'
177 | using void_t = void;
| ^~~~~
p635.cpp:179:15: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
179 | template<class... B> struct conjunction; template<class... B> struct disjunction; template<class B> struct negation;
| ^~~
p635.cpp:179:56: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
179 | template<class... B> struct conjunction; template<class... B> struct disjunction; template<class B> struct negation;
| ^~~
p635.cpp:182:10: error: 'constexpr' does not name a type
182 | inline constexpr bool is_void_v = is_void<T>::value;
| ^~~~~~~~~
p635.cpp:182:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:184:10: error: 'constexpr' does not name a type
184 | inline constexpr bool is_null_pointer_v = is_null_pointer<T>::value;
| ^~~~~~~~~
p635.cpp:184:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:186:10: error: 'constexpr' does not name a type
186 | inline constexpr bool is_integral_v = is_integral<T>::value;
| ^~~~~~~~~
p635.cpp:186:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:188:10: error: 'constexpr' does not name a type
188 | inline constexpr bool is_floating_point_v = is_floating_point<T>::value;
| ^~~~~~~~~
p635.cpp:188:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:190:10: error: 'constexpr' does not name a type
190 | inline constexpr bool is_array_v = is_array<T>::value;
| ^~~~~~~~~
p635.cpp:190:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:192:10: error: 'constexpr' does not name a type
192 | inline constexpr bool is_pointer_v = is_pointer<T>::value;
| ^~~~~~~~~
p635.cpp:192:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:194:10: error: 'constexpr' does not name a type
194 | inline constexpr bool is_lvalue_reference_v = is_lvalue_reference<T>::value;
| ^~~~~~~~~
p635.cpp:194:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:196:10: error: 'constexpr' does not name a type
196 | inline constexpr bool is_rvalue_reference_v = is_rvalue_reference<T>::value;
| ^~~~~~~~~
p635.cpp:196:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:198:10: error: 'constexpr' does not name a type
198 | inline constexpr bool is_member_object_pointer_v = is_member_object_pointer<T>::value;
| ^~~~~~~~~
p635.cpp:198:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:200:10: error: 'constexpr' does not name a type
200 | inline constexpr bool is_member_function_pointer_v = is_member_function_pointer<T>::value;
| ^~~~~~~~~
p635.cpp:200:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:202:10: error: 'constexpr' does not name a type
202 | inline constexpr bool is_enum_v = is_enum<T>::value;
| ^~~~~~~~~
p635.cpp:202:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:204:10: error: 'constexpr' does not name a type
204 | inline constexpr bool is_union_v = is_union<T>::value;
| ^~~~~~~~~
p635.cpp:204:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:206:10: error: 'constexpr' does not name a type
206 | inline constexpr bool is_class_v = is_class<T>::value;
| ^~~~~~~~~
p635.cpp:206:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:208:10: error: 'constexpr' does not name a type
208 | inline constexpr bool is_function_v = is_function<T>::value;
| ^~~~~~~~~
p635.cpp:208:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:211:10: error: 'constexpr' does not name a type
211 | inline constexpr bool is_reference_v = is_reference<T>::value;
| ^~~~~~~~~
p635.cpp:211:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:213:10: error: 'constexpr' does not name a type
213 | inline constexpr bool is_arithmetic_v = is_arithmetic<T>::value;
| ^~~~~~~~~
p635.cpp:213:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:215:10: error: 'constexpr' does not name a type
215 | inline constexpr bool is_fundamental_v = is_fundamental<T>::value;
| ^~~~~~~~~
p635.cpp:215:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:217:10: error: 'constexpr' does not name a type
217 | inline constexpr bool is_object_v = is_object<T>::value;
| ^~~~~~~~~
p635.cpp:217:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:219:10: error: 'constexpr' does not name a type
219 | inline constexpr bool is_scalar_v = is_scalar<T>::value;
| ^~~~~~~~~
p635.cpp:219:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:221:10: error: 'constexpr' does not name a type
221 | inline constexpr bool is_compound_v = is_compound<T>::value;
| ^~~~~~~~~
p635.cpp:221:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:223:10: error: 'constexpr' does not name a type
223 | inline constexpr bool is_member_pointer_v = is_member_pointer<T>::value;
| ^~~~~~~~~
p635.cpp:223:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:226:10: error: 'constexpr' does not name a type
226 | inline constexpr bool is_const_v = is_const<T>::value;
| ^~~~~~~~~
p635.cpp:226:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:228:10: error: 'constexpr' does not name a type
228 | inline constexpr bool is_volatile_v = is_volatile<T>::value;
| ^~~~~~~~~
p635.cpp:228:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:230:10: error: 'constexpr' does not name a type
230 | inline constexpr bool is_trivial_v = is_trivial<T>::value;
| ^~~~~~~~~
p635.cpp:230:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:232:10: error: 'constexpr' does not name a type
232 | inline constexpr bool is_trivially_copyable_v = is_trivially_copyable<T>::value;
| ^~~~~~~~~
p635.cpp:232:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:234:10: error: 'constexpr' does not name a type
234 | inline constexpr bool is_standard_layout_v = is_standard_layout<T>::value;
| ^~~~~~~~~
p635.cpp:234:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:236:10: error: 'constexpr' does not name a type
236 | inline constexpr bool is_empty_v = is_empty<T>::value;
| ^~~~~~~~~
p635.cpp:236:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:238:10: error: 'constexpr' does not name a type
238 | inline constexpr bool is_polymorphic_v = is_polymorphic<T>::value;
| ^~~~~~~~~
p635.cpp:238:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:240:10: error: 'constexpr' does not name a type
240 | inline constexpr bool is_abstract_v = is_abstract<T>::value;
| ^~~~~~~~~
p635.cpp:240:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:242:10: error: 'constexpr' does not name a type
242 | inline constexpr bool is_final_v = is_final<T>::value;
| ^~~~~~~~~
p635.cpp:242:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:244:10: error: 'constexpr' does not name a type
244 | inline constexpr bool is_aggregate_v = is_aggregate<T>::value;
| ^~~~~~~~~
p635.cpp:244:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:246:10: error: 'constexpr' does not name a type
246 | inline constexpr bool is_signed_v = is_signed<T>::value;
| ^~~~~~~~~
p635.cpp:246:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:248:10: error: 'constexpr' does not name a type
248 | inline constexpr bool is_unsigned_v = is_unsigned<T>::value;
| ^~~~~~~~~
p635.cpp:248:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:250:10: error: 'constexpr' does not name a type
250 | inline constexpr bool is_bounded_array_v = is_bounded_array<T>::value;
| ^~~~~~~~~
p635.cpp:250:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:252:10: error: 'constexpr' does not name a type
252 | inline constexpr bool is_unbounded_array_v = is_unbounded_array<T>::value;
| ^~~~~~~~~
p635.cpp:252:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:254:10: error: 'constexpr' does not name a type
254 | inline constexpr bool is_scoped_enum_v = is_scoped_enum<T>::value;
| ^~~~~~~~~
p635.cpp:254:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:255:24: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
255 | template<class T, class... Args>
| ^~~
p635.cpp:256:10: error: 'constexpr' does not name a type
256 | inline constexpr bool is_constructible_v = is_constructible<T, Args...>::value;
| ^~~~~~~~~
p635.cpp:256:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:258:10: error: 'constexpr' does not name a type
258 | inline constexpr bool is_default_constructible_v = is_default_constructible<T>::value;
| ^~~~~~~~~
p635.cpp:258:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:260:10: error: 'constexpr' does not name a type
260 | inline constexpr bool is_copy_constructible_v = is_copy_constructible<T>::value;
| ^~~~~~~~~
p635.cpp:260:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:262:10: error: 'constexpr' does not name a type
262 | inline constexpr bool is_move_constructible_v = is_move_constructible<T>::value;
| ^~~~~~~~~
p635.cpp:262:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:264:10: error: 'constexpr' does not name a type
264 | inline constexpr bool is_assignable_v = is_assignable<T, U>::value;
| ^~~~~~~~~
p635.cpp:264:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:266:10: error: 'constexpr' does not name a type
266 | inline constexpr bool is_copy_assignable_v = is_copy_assignable<T>::value;
| ^~~~~~~~~
p635.cpp:266:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:268:10: error: 'constexpr' does not name a type
268 | inline constexpr bool is_move_assignable_v = is_move_assignable<T>::value;
| ^~~~~~~~~
p635.cpp:268:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:270:10: error: 'constexpr' does not name a type
270 | inline constexpr bool is_swappable_with_v = is_swappable_with<T, U>::value;
| ^~~~~~~~~
p635.cpp:270:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:272:10: error: 'constexpr' does not name a type
272 | inline constexpr bool is_swappable_v = is_swappable<T>::value;
| ^~~~~~~~~
p635.cpp:272:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:274:10: error: 'constexpr' does not name a type
274 | inline constexpr bool is_destructible_v = is_destructible<T>::value;
| ^~~~~~~~~
p635.cpp:274:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:275:24: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
275 | template<class T, class... Args>
| ^~~
p635.cpp:276:10: error: 'constexpr' does not name a type
276 | inline constexpr bool is_trivially_constructible_v
| ^~~~~~~~~
p635.cpp:276:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:279:10: error: 'constexpr' does not name a type
279 | inline constexpr bool is_trivially_default_constructible_v
| ^~~~~~~~~
p635.cpp:279:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:282:10: error: 'constexpr' does not name a type
282 | inline constexpr bool is_trivially_copy_constructible_v
| ^~~~~~~~~
p635.cpp:282:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:285:10: error: 'constexpr' does not name a type
285 | inline constexpr bool is_trivially_move_constructible_v
| ^~~~~~~~~
p635.cpp:285:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:288:10: error: 'constexpr' does not name a type
288 | inline constexpr bool is_trivially_assignable_v = is_trivially_assignable<T, U>::value;
| ^~~~~~~~~
p635.cpp:288:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:290:10: error: 'constexpr' does not name a type
290 | inline constexpr bool is_trivially_copy_assignable_v
| ^~~~~~~~~
p635.cpp:290:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:293:10: error: 'constexpr' does not name a type
293 | inline constexpr bool is_trivially_move_assignable_v
| ^~~~~~~~~
p635.cpp:293:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:296:10: error: 'constexpr' does not name a type
296 | inline constexpr bool is_trivially_destructible_v = is_trivially_destructible<T>::value;
| ^~~~~~~~~
p635.cpp:296:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:297:24: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
297 | template<class T, class... Args>
| ^~~
p635.cpp:298:10: error: 'constexpr' does not name a type
298 | inline constexpr bool is_nothrow_constructible_v
| ^~~~~~~~~
p635.cpp:298:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:301:10: error: 'constexpr' does not name a type
301 | inline constexpr bool is_nothrow_default_constructible_v
| ^~~~~~~~~
p635.cpp:301:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:304:10: error: 'constexpr' does not name a type
304 | inline constexpr bool is_nothrow_copy_constructible_v
| ^~~~~~~~~
p635.cpp:304:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:307:10: error: 'constexpr' does not name a type
307 | inline constexpr bool is_nothrow_move_constructible_v
| ^~~~~~~~~
p635.cpp:307:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:310:10: error: 'constexpr' does not name a type
310 | inline constexpr bool is_nothrow_assignable_v = is_nothrow_assignable<T, U>::value;
| ^~~~~~~~~
p635.cpp:310:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:312:10: error: 'constexpr' does not name a type
312 | inline constexpr bool is_nothrow_copy_assignable_v = is_nothrow_copy_assignable<T>::value;
| ^~~~~~~~~
p635.cpp:312:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:314:10: error: 'constexpr' does not name a type
314 | inline constexpr bool is_nothrow_move_assignable_v = is_nothrow_move_assignable<T>::value;
| ^~~~~~~~~
p635.cpp:314:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:316:10: error: 'constexpr' does not name a type
316 | inline constexpr bool is_nothrow_swappable_with_v = is_nothrow_swappable_with<T, U>::value;
| ^~~~~~~~~
p635.cpp:316:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:318:10: error: 'constexpr' does not name a type
318 | inline constexpr bool is_nothrow_swappable_v = is_nothrow_swappable<T>::value;
| ^~~~~~~~~
p635.cpp:318:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:320:10: error: 'constexpr' does not name a type
320 | inline constexpr bool is_nothrow_destructible_v = is_nothrow_destructible<T>::value;
| ^~~~~~~~~
p635.cpp:320:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:322:10: error: 'constexpr' does not name a type
322 | inline constexpr bool has_virtual_destructor_v = has_virtual_destructor<T>::value;
| ^~~~~~~~~
p635.cpp:322:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:324:10: error: 'constexpr' does not name a type
324 | inline constexpr bool has_unique_object_representations_v
| ^~~~~~~~~
p635.cpp:324:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:327:10: error: 'constexpr' does not name a type
327 | inline constexpr bool reference_constructs_from_temporary_v
| ^~~~~~~~~
p635.cpp:327:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:330:10: error: 'constexpr' does not name a type
330 | inline constexpr bool reference_converts_from_temporary_v
| ^~~~~~~~~
p635.cpp:330:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:334:10: error: 'constexpr' does not name a type
334 | inline constexpr size_t alignment_of_v = alignment_of<T>::value;
| ^~~~~~~~~
p635.cpp:334:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:336:10: error: 'constexpr' does not name a type
336 | inline constexpr size_t rank_v = rank<T>::value;
| ^~~~~~~~~
p635.cpp:336:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:338:10: error: 'constexpr' does not name a type
338 | inline constexpr size_t extent_v = extent<T, I>::value;
| ^~~~~~~~~
p635.cpp:338:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:341:10: error: 'constexpr' does not name a type
341 | inline constexpr bool is_same_v = is_same<T, U>::value;
| ^~~~~~~~~
p635.cpp:341:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:343:10: error: 'constexpr' does not name a type
343 | inline constexpr bool is_base_of_v = is_base_of<Base, Derived>::value;
| ^~~~~~~~~
p635.cpp:343:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:345:10: error: 'constexpr' does not name a type
345 | inline constexpr bool is_convertible_v = is_convertible<From, To>::value;
| ^~~~~~~~~
p635.cpp:345:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:347:10: error: 'constexpr' does not name a type
347 | inline constexpr bool is_nothrow_convertible_v = is_nothrow_convertible<From, To>::value;
| ^~~~~~~~~
p635.cpp:347:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:349:10: error: 'constexpr' does not name a type
349 | inline constexpr bool is_layout_compatible_v = is_layout_compatible<T, U>::value;
| ^~~~~~~~~
p635.cpp:349:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:351:10: error: 'constexpr' does not name a type
351 | inline constexpr bool is_pointer_interconvertible_base_of_v
| ^~~~~~~~~
p635.cpp:351:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:353:25: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
353 | template<class Fn, class... ArgTypes>
| ^~~
p635.cpp:354:10: error: 'constexpr' does not name a type
354 | inline constexpr bool is_invocable_v = is_invocable<Fn, ArgTypes...>::value;
| ^~~~~~~~~
p635.cpp:354:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:355:34: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
355 | template<class R, class Fn, class... ArgTypes>
| ^~~
p635.cpp:356:10: error: 'constexpr' does not name a type
356 | inline constexpr bool is_invocable_r_v = is_invocable_r<R, Fn, ArgTypes...>::value;
| ^~~~~~~~~
p635.cpp:356:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:357:25: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
357 | template<class Fn, class... ArgTypes>
| ^~~
p635.cpp:358:10: error: 'constexpr' does not name a type
358 | inline constexpr bool is_nothrow_invocable_v = is_nothrow_invocable<Fn, ArgTypes...>::value;
| ^~~~~~~~~
p635.cpp:358:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:359:34: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
359 | template<class R, class Fn, class... ArgTypes>
| ^~~
p635.cpp:360:10: error: 'constexpr' does not name a type
360 | inline constexpr bool is_nothrow_invocable_r_v
| ^~~~~~~~~
p635.cpp:360:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:363:15: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
363 | template<class... B>
| ^~~
p635.cpp:364:10: error: 'constexpr' does not name a type
364 | inline constexpr bool conjunction_v = conjunction<B...>::value;
| ^~~~~~~~~
p635.cpp:364:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:365:15: warning: variadic templates only available with '-std=c++11' or '-std=gnu++11' [-Wc++11-extensions]
365 | template<class... B>
| ^~~
p635.cpp:366:10: error: 'constexpr' does not name a type
366 | inline constexpr bool disjunction_v = disjunction<B...>::value;
| ^~~~~~~~~
p635.cpp:366:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:368:10: error: 'constexpr' does not name a type
368 | inline constexpr bool negation_v = negation<B>::value;
| ^~~~~~~~~
p635.cpp:368:10: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:370:7: error: 'constexpr' does not name a type
370 | constexpr bool is_pointer_interconvertible_with_class(M S::*m) noexcept;
| ^~~~~~~~~
p635.cpp:370:7: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:372:7: error: 'constexpr' does not name a type
372 | constexpr bool is_corresponding_member(M1 S1::*m1, M2 S2::*m2) noexcept;
| ^~~~~~~~~
p635.cpp:372:7: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p635.cpp:374:5: error: 'constexpr' does not name a type
374 | constexpr bool is_constant_evaluated() noexcept;
| ^~~~~~~~~
p635.cpp:374:5: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
$ g++ p635.cpp -std=2b -o p635g -I. -Wall
p635.cpp:87:32: error: redefinition of default argument for 'unsigned int I'
87 | template<class T, unsigned I = 0> struct extent;
| ^
In file included from /usr/local/include/c++/12.1.0/bits/move.h:57,
from /usr/local/include/c++/12.1.0/bits/exception_ptr.h:43,
from /usr/local/include/c++/12.1.0/exception:168,
from /usr/local/include/c++/12.1.0/ios:39,
from /usr/local/include/c++/12.1.0/ostream:38,
from /usr/local/include/c++/12.1.0/iostream:39,
from p635.cpp:10:
/usr/local/include/c++/12.1.0/type_traits:843:33: note: original definition appeared here
843 | template<typename, unsigned = 0>
| ^
p635.cpp:144:16: error: redefinition of default argument for 'class T'
144 | template<bool, class T = void> struct enable_if;
| ^~~~~
/usr/local/include/c++/12.1.0/type_traits:2227:18: note: original definition appeared here
2227 | template<bool, typename _Tp = void>
| ^~~~~~~~
p635.cpp:148:10: error: redefinition of 'struct std::basic_common_reference<_Tp, _Up, _TQual, _UQual>'
148 | struct basic_common_reference { };
| ^~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3587:12: note: previous definition of 'struct std::basic_common_reference<_Tp, _Up, _TQual, _UQual>'
3587 | struct basic_common_reference
| ^~~~~~~~~~~~~~~~~~~~~~
p635.cpp:182:25: error: redefinition of 'template<class T> constexpr const bool std::is_void_v'
182 | inline constexpr bool is_void_v = is_void<T>::value;
| ^~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3120:25: note: 'template<class _Tp> constexpr const bool std::is_void_v<_Tp>' previously declared here
3120 | inline constexpr bool is_void_v = is_void<_Tp>::value;
| ^~~~~~~~~
p635.cpp:184:25: error: redefinition of 'template<class T> constexpr const bool std::is_null_pointer_v'
184 | inline constexpr bool is_null_pointer_v = is_null_pointer<T>::value;
| ^~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3122:25: note: 'template<class _Tp> constexpr const bool std::is_null_pointer_v<_Tp>' previously declared here
3122 | inline constexpr bool is_null_pointer_v = is_null_pointer<_Tp>::value;
| ^~~~~~~~~~~~~~~~~
p635.cpp:186:25: error: redefinition of 'template<class T> constexpr const bool std::is_integral_v'
186 | inline constexpr bool is_integral_v = is_integral<T>::value;
| ^~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3124:25: note: 'template<class _Tp> constexpr const bool std::is_integral_v<_Tp>' previously declared here
3124 | inline constexpr bool is_integral_v = is_integral<_Tp>::value;
| ^~~~~~~~~~~~~
p635.cpp:188:25: error: redefinition of 'template<class T> constexpr const bool std::is_floating_point_'
188 | inline constexpr bool is_floating_point_v = is_floating_point<T>::value;
| ^~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3126:25: note: 'template<class _Tp> constexpr const bool std::is_floating_point_v<_Tp>' previously declared here
3126 | inline constexpr bool is_floating_point_v = is_floating_point<_Tp>::value;
| ^~~~~~~~~~~~~~~~~~~
p635.cpp:190:25: error: redefinition of 'template<class T> constexpr const bool std::is_array_v'
190 | inline constexpr bool is_array_v = is_array<T>::value;
| ^~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3128:25: note: 'template<class _Tp> constexpr const bool std::is_array_v<_Tp>' previously declared here
3128 | inline constexpr bool is_array_v = is_array<_Tp>::value;
| ^~~~~~~~~~
p635.cpp:192:25: error: redefinition of 'template<class T> constexpr const bool std::is_pointer_v'
192 | inline constexpr bool is_pointer_v = is_pointer<T>::value;
| ^~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3130:25: note: 'template<class _Tp> constexpr const bool std::is_pointer_v<_Tp>' previously declared here
3130 | inline constexpr bool is_pointer_v = is_pointer<_Tp>::value;
| ^~~~~~~~~~~~
p635.cpp:194:25: error: redefinition of 'template<class T> constexpr const bool std::is_lvalue_reference_v'
194 | inline constexpr bool is_lvalue_reference_v = is_lvalue_reference<T>::value;
| ^~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3132:25: note: 'template<class _Tp> constexpr const bool std::is_lvalue_reference_v<_Tp>' previously declared here
3132 | inline constexpr bool is_lvalue_reference_v =
| ^~~~~~~~~~~~~~~~~~~~~
p635.cpp:196:25: error: redefinition of 'template<class T> constexpr const bool std::is_rvalue_reference_v'
196 | inline constexpr bool is_rvalue_reference_v = is_rvalue_reference<T>::value;
| ^~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3135:25: note: 'template<class _Tp> constexpr const bool std::is_rvalue_reference_v<_Tp>' previously declared here
3135 | inline constexpr bool is_rvalue_reference_v =
| ^~~~~~~~~~~~~~~~~~~~~
p635.cpp:198:25: error: redefinition of 'template<class T> constexpr const bool std::is_member_object_pointer_v'
198 | inline constexpr bool is_member_object_pointer_v = is_member_object_pointer<T>::value;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3138:25: note: 'template<class _Tp> constexpr const bool std::is_member_object_pointer_v<_Tp>' previously declared here
3138 | inline constexpr bool is_member_object_pointer_v =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:200:25: error: redefinition of 'template<class T> constexpr const bool std::is_member_function_pointer_v'
200 | inline constexpr bool is_member_function_pointer_v = is_member_function_pointer<T>::value;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3141:25: note: 'template<class _Tp> constexpr const bool std::is_member_function_pointer_v<_Tp>' previously declared here
3141 | inline constexpr bool is_member_function_pointer_v =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:202:25: error: redefinition of 'template<class T> constexpr const bool std::is_enum_v'
202 | inline constexpr bool is_enum_v = is_enum<T>::value;
| ^~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3144:25: note: 'template<class _Tp> constexpr const bool std::is_enum_v<_Tp>' previously declared here
3144 | inline constexpr bool is_enum_v = is_enum<_Tp>::value;
| ^~~~~~~~~
p635.cpp:204:25: error: redefinition of 'template<class T> constexpr const bool std::is_union_v'
204 | inline constexpr bool is_union_v = is_union<T>::value;
| ^~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3146:25: note: 'template<class _Tp> constexpr const bool std::is_union_v<_Tp>' previously declared here
3146 | inline constexpr bool is_union_v = is_union<_Tp>::value;
| ^~~~~~~~~~
p635.cpp:206:25: error: redefinition of 'template<class T> constexpr const bool std::is_class_v'
206 | inline constexpr bool is_class_v = is_class<T>::value;
| ^~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3148:25: note: 'template<class _Tp> constexpr const bool std::is_class_v<_Tp>' previously declared here
3148 | inline constexpr bool is_class_v = is_class<_Tp>::value;
| ^~~~~~~~~~
p635.cpp:208:25: error: redefinition of 'template<class T> constexpr const bool std::is_function_v'
208 | inline constexpr bool is_function_v = is_function<T>::value;
| ^~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3150:25: note: 'template<class _Tp> constexpr const bool std::is_function_v<_Tp>' previously declared here
3150 | inline constexpr bool is_function_v = is_function<_Tp>::value;
| ^~~~~~~~~~~~~
p635.cpp:211:25: error: redefinition of 'template<class T> constexpr const bool std::is_reference_v'
211 | inline constexpr bool is_reference_v = is_reference<T>::value;
| ^~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3152:25: note: 'template<class _Tp> constexpr const bool std::is_reference_v<_Tp>' previously declared here
3152 | inline constexpr bool is_reference_v = is_reference<_Tp>::value;
| ^~~~~~~~~~~~~~
p635.cpp:213:25: error: redefinition of 'template<class T> constexpr const bool std::is_arithmetic_v'
213 | inline constexpr bool is_arithmetic_v = is_arithmetic<T>::value;
| ^~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3154:25: note: 'template<class _Tp> constexpr const bool std::is_arithmetic_v<_Tp>' previously declared here
3154 | inline constexpr bool is_arithmetic_v = is_arithmetic<_Tp>::value;
| ^~~~~~~~~~~~~~~
p635.cpp:215:25: error: redefinition of 'template<class T> constexpr const bool std::is_fundamental_v'
215 | inline constexpr bool is_fundamental_v = is_fundamental<T>::value;
| ^~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3156:25: note: 'template<class _Tp> constexpr const bool std::is_fundamental_v<_Tp>' previously declared here
3156 | inline constexpr bool is_fundamental_v = is_fundamental<_Tp>::value;
| ^~~~~~~~~~~~~~~~
p635.cpp:217:25: error: redefinition of 'template<class T> constexpr const bool std::is_object_v'
217 | inline constexpr bool is_object_v = is_object<T>::value;
| ^~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3158:25: note: 'template<class _Tp> constexpr const bool std::is_object_v<_Tp>' previously declared here
3158 | inline constexpr bool is_object_v = is_object<_Tp>::value;
| ^~~~~~~~~~~
p635.cpp:219:25: error: redefinition of 'template<class T> constexpr const bool std::is_scalar_v'
219 | inline constexpr bool is_scalar_v = is_scalar<T>::value;
| ^~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3160:25: note: 'template<class _Tp> constexpr const bool std::is_scalar_v<_Tp>' previously declared here
3160 | inline constexpr bool is_scalar_v = is_scalar<_Tp>::value;
| ^~~~~~~~~~~
p635.cpp:221:25: error: redefinition of 'template<class T> constexpr const bool std::is_compound_v'
221 | inline constexpr bool is_compound_v = is_compound<T>::value;
| ^~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3162:25: note: 'template<class _Tp> constexpr const bool std::is_compound_v<_Tp>' previously declared here
3162 | inline constexpr bool is_compound_v = is_compound<_Tp>::value;
| ^~~~~~~~~~~~~
p635.cpp:223:25: error: redefinition of 'template<class T> constexpr const bool std::is_member_pointer_'
223 | inline constexpr bool is_member_pointer_v = is_member_pointer<T>::value;
| ^~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3164:25: note: 'template<class _Tp> constexpr const bool std::is_member_pointer_v<_Tp>' previously declared here
3164 | inline constexpr bool is_member_pointer_v = is_member_pointer<_Tp>::value;
| ^~~~~~~~~~~~~~~~~~~
p635.cpp:226:25: error: redefinition of 'template<class T> constexpr const bool std::is_const_v'
226 | inline constexpr bool is_const_v = is_const<T>::value;
| ^~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3166:25: note: 'template<class _Tp> constexpr const bool std::is_const_v<_Tp>' previously declared here
3166 | inline constexpr bool is_const_v = is_const<_Tp>::value;
| ^~~~~~~~~~
p635.cpp:228:25: error: redefinition of 'template<class T> constexpr const bool std::is_volatile_v'
228 | inline constexpr bool is_volatile_v = is_volatile<T>::value;
| ^~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3168:25: note: 'template<class _Tp> constexpr const bool std::is_volatile_v<_Tp>' previously declared here
3168 | inline constexpr bool is_volatile_v = is_volatile<_Tp>::value;
| ^~~~~~~~~~~~~
p635.cpp:230:25: error: redefinition of 'template<class T> constexpr const bool std::is_trivial_v'
230 | inline constexpr bool is_trivial_v = is_trivial<T>::value;
| ^~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3170:25: note: 'template<class _Tp> constexpr const bool std::is_trivial_v<_Tp>' previously declared here
3170 | inline constexpr bool is_trivial_v = is_trivial<_Tp>::value;
| ^~~~~~~~~~~~
p635.cpp:232:25: error: redefinition of 'template<class T> constexpr const bool std::is_trivially_copyable_v'
232 | inline constexpr bool is_trivially_copyable_v = is_trivially_copyable<T>::value;
| ^~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3172:25: note: 'template<class _Tp> constexpr const bool std::is_trivially_copyable_v<_Tp>' previously declared here
3172 | inline constexpr bool is_trivially_copyable_v =
| ^~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:234:25: error: redefinition of 'template<class T> constexpr const bool std::is_standard_layout_v'
234 | inline constexpr bool is_standard_layout_v = is_standard_layout<T>::value;
| ^~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3175:25: note: 'template<class _Tp> constexpr const bool std::is_standard_layout_v<_Tp>' previously declared here
3175 | inline constexpr bool is_standard_layout_v = is_standard_layout<_Tp>::value;
| ^~~~~~~~~~~~~~~~~~~~
p635.cpp:236:25: error: redefinition of 'template<class T> constexpr const bool std::is_empty_v'
236 | inline constexpr bool is_empty_v = is_empty<T>::value;
| ^~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3186:25: note: 'template<class _Tp> constexpr const bool std::is_empty_v<_Tp>' previously declared here
3186 | inline constexpr bool is_empty_v = is_empty<_Tp>::value;
| ^~~~~~~~~~
p635.cpp:238:25: error: redefinition of 'template<class T> constexpr const bool std::is_polymorphic_v'
238 | inline constexpr bool is_polymorphic_v = is_polymorphic<T>::value;
| ^~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3188:25: note: 'template<class _Tp> constexpr const bool std::is_polymorphic_v<_Tp>' previously declared here
3188 | inline constexpr bool is_polymorphic_v = is_polymorphic<_Tp>::value;
| ^~~~~~~~~~~~~~~~
p635.cpp:240:25: error: redefinition of 'template<class T> constexpr const bool std::is_abstract_v'
240 | inline constexpr bool is_abstract_v = is_abstract<T>::value;
| ^~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3190:25: note: 'template<class _Tp> constexpr const bool std::is_abstract_v<_Tp>' previously declared here
3190 | inline constexpr bool is_abstract_v = is_abstract<_Tp>::value;
| ^~~~~~~~~~~~~
p635.cpp:242:25: error: redefinition of 'template<class T> constexpr const bool std::is_final_v'
242 | inline constexpr bool is_final_v = is_final<T>::value;
| ^~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3192:25: note: 'template<class _Tp> constexpr const bool std::is_final_v<_Tp>' previously declared here
3192 | inline constexpr bool is_final_v = is_final<_Tp>::value;
| ^~~~~~~~~~
p635.cpp:244:25: error: redefinition of 'template<class T> constexpr const bool std::is_aggregate_v'
244 | inline constexpr bool is_aggregate_v = is_aggregate<T>::value;
| ^~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3329:27: note: 'template<class _Tp> constexpr const bool std::is_aggregate_v<_Tp>' previously declared here
3329 | inline constexpr bool is_aggregate_v = is_aggregate<_Tp>::value;
| ^~~~~~~~~~~~~~
p635.cpp:246:25: error: redefinition of 'template<class T> constexpr const bool std::is_signed_v'
246 | inline constexpr bool is_signed_v = is_signed<T>::value;
| ^~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3194:25: note: 'template<class _Tp> constexpr const bool std::is_signed_v<_Tp>' previously declared here
3194 | inline constexpr bool is_signed_v = is_signed<_Tp>::value;
| ^~~~~~~~~~~
p635.cpp:248:25: error: redefinition of 'template<class T> constexpr const bool std::is_unsigned_v'
248 | inline constexpr bool is_unsigned_v = is_unsigned<T>::value;
| ^~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3196:25: note: 'template<class _Tp> constexpr const bool std::is_unsigned_v<_Tp>' previously declared here
3196 | inline constexpr bool is_unsigned_v = is_unsigned<_Tp>::value;
| ^~~~~~~~~~~~~
p635.cpp:250:25: error: redefinition of 'template<class T> constexpr const bool std::is_bounded_array_v'
250 | inline constexpr bool is_bounded_array_v = is_bounded_array<T>::value;
| ^~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3418:27: note: 'template<class _Tp> constexpr const bool std::is_bounded_array_v<_Tp>' previously declared here
3418 | inline constexpr bool is_bounded_array_v
| ^~~~~~~~~~~~~~~~~~
p635.cpp:252:25: error: redefinition of 'template<class T> constexpr const bool std::is_unbounded_array_v'
252 | inline constexpr bool is_unbounded_array_v = is_unbounded_array<T>::value;
| ^~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3424:27: note: 'template<class _Tp> constexpr const bool std::is_unbounded_array_v<_Tp>' previously declared here
3424 | inline constexpr bool is_unbounded_array_v
| ^~~~~~~~~~~~~~~~~~~~
p635.cpp:254:25: error: redefinition of 'template<class T> constexpr const bool std::is_scoped_enum_v'
254 | inline constexpr bool is_scoped_enum_v = is_scoped_enum<T>::value;
| ^~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3509:27: note: 'template<class _Tp> constexpr const bool std::is_scoped_enum_v<_Tp>' previously declared here
3509 | inline constexpr bool is_scoped_enum_v = is_scoped_enum<_Tp>::value;
| ^~~~~~~~~~~~~~~~
p635.cpp:256:25: error: redefinition of 'template<class T, class ... Args> constexpr const bool std::is_constructible_v'
256 | inline constexpr bool is_constructible_v = is_constructible<T, Args...>::value;
| ^~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3198:25: note: 'template<class _Tp, class ... _Args> constexpr const bool std::is_constructible_v<_Tp, _Args ...>' previously declared here
3198 | inline constexpr bool is_constructible_v =
| ^~~~~~~~~~~~~~~~~~
p635.cpp:258:25: error: redefinition of 'template<class T> constexpr const bool std::is_default_constructible_v'
258 | inline constexpr bool is_default_constructible_v = is_default_constructible<T>::value;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3201:25: note: 'template<class _Tp> constexpr const bool std::is_default_constructible_v<_Tp>' previously declared here
3201 | inline constexpr bool is_default_constructible_v =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:260:25: error: redefinition of 'template<class T> constexpr const bool std::is_copy_constructible_v'
260 | inline constexpr bool is_copy_constructible_v = is_copy_constructible<T>::value;
| ^~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3204:25: note: 'template<class _Tp> constexpr const bool std::is_copy_constructible_v<_Tp>' previously declared here
3204 | inline constexpr bool is_copy_constructible_v =
| ^~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:262:25: error: redefinition of 'template<class T> constexpr const bool std::is_move_constructible_v'
262 | inline constexpr bool is_move_constructible_v = is_move_constructible<T>::value;
| ^~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3207:25: note: 'template<class _Tp> constexpr const bool std::is_move_constructible_v<_Tp>' previously declared here
3207 | inline constexpr bool is_move_constructible_v =
| ^~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:264:25: error: redefinition of 'template<class T, class U> constexpr const bool std::is_assignable_v'
264 | inline constexpr bool is_assignable_v = is_assignable<T, U>::value;
| ^~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3210:25: note: 'template<class _Tp, class _Up> constexpr const bool std::is_assignable_v<_Tp, _Up>' previously declared here
3210 | inline constexpr bool is_assignable_v = is_assignable<_Tp, _Up>::value;
| ^~~~~~~~~~~~~~~
p635.cpp:266:25: error: redefinition of 'template<class T> constexpr const bool std::is_copy_assignable_v'
266 | inline constexpr bool is_copy_assignable_v = is_copy_assignable<T>::value;
| ^~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3212:25: note: 'template<class _Tp> constexpr const bool std::is_copy_assignable_v<_Tp>' previously declared here
3212 | inline constexpr bool is_copy_assignable_v = is_copy_assignable<_Tp>::value;
| ^~~~~~~~~~~~~~~~~~~~
p635.cpp:268:25: error: redefinition of 'template<class T> constexpr const bool std::is_move_assignable_v'
268 | inline constexpr bool is_move_assignable_v = is_move_assignable<T>::value;
| ^~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3214:25: note: 'template<class _Tp> constexpr const bool std::is_move_assignable_v<_Tp>' previously declared here
3214 | inline constexpr bool is_move_assignable_v = is_move_assignable<_Tp>::value;
| ^~~~~~~~~~~~~~~~~~~~
p635.cpp:270:25: error: redefinition of 'template<class T, class U> constexpr const bool std::is_swappable_with_v'
270 | inline constexpr bool is_swappable_with_v = is_swappable_with<T, U>::value;
| ^~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:2891:38: note: 'template<class _Tp, class _Up> constexpr const bool std::is_swappable_with_v<_Tp, _Up>' previously declared here
2891 | _GLIBCXX17_INLINE constexpr bool is_swappable_with_v =
| ^~~~~~~~~~~~~~~~~~~
p635.cpp:272:25: error: redefinition of 'template<class T> constexpr const bool std::is_swappable_v'
272 | inline constexpr bool is_swappable_v = is_swappable<T>::value;
| ^~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:2795:38: note: 'template<class _Tp> constexpr const bool std::is_swappable_v<_Tp>' previously declared here
2795 | _GLIBCXX17_INLINE constexpr bool is_swappable_v =
| ^~~~~~~~~~~~~~
p635.cpp:274:25: error: redefinition of 'template<class T> constexpr const bool std::is_destructible_v'
274 | inline constexpr bool is_destructible_v = is_destructible<T>::value;
| ^~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3216:25: note: 'template<class _Tp> constexpr const bool std::is_destructible_v<_Tp>' previously declared here
3216 | inline constexpr bool is_destructible_v = is_destructible<_Tp>::value;
| ^~~~~~~~~~~~~~~~~
p635.cpp:276:25: error: redefinition of 'template<class T, class ... Args> constexpr const bool std::is_trivially_constructible_v'
276 | inline constexpr bool is_trivially_constructible_v
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3218:25: note: 'template<class _Tp, class ... _Args> constexpr const bool std::is_trivially_constructible_v<_Tp, _Args ...>' previously declared here
3218 | inline constexpr bool is_trivially_constructible_v =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:279:25: error: redefinition of 'template<class T> constexpr const bool std::is_trivially_default_constructible_v'
279 | inline constexpr bool is_trivially_default_constructible_v
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3221:25: note: 'template<class _Tp> constexpr const bool std::is_trivially_default_constructible_v<_Tp>' previously declared here
3221 | inline constexpr bool is_trivially_default_constructible_v =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:282:25: error: redefinition of 'template<class T> constexpr const bool std::is_trivially_copy_constructible_v'
282 | inline constexpr bool is_trivially_copy_constructible_v
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3224:25: note: 'template<class _Tp> constexpr const bool std::is_trivially_copy_constructible_v<_Tp>' previously declared here
3224 | inline constexpr bool is_trivially_copy_constructible_v =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:285:25: error: redefinition of 'template<class T> constexpr const bool std::is_trivially_move_constructible_v'
285 | inline constexpr bool is_trivially_move_constructible_v
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3227:25: note: 'template<class _Tp> constexpr const bool std::is_trivially_move_constructible_v<_Tp>' previously declared here
3227 | inline constexpr bool is_trivially_move_constructible_v =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:288:25: error: redefinition of 'template<class T, class U> constexpr const bool std::is_trivially_assignable_v'
288 | inline constexpr bool is_trivially_assignable_v = is_trivially_assignable<T, U>::value;
| ^~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3230:25: note: 'template<class _Tp, class _Up> constexpr const bool std::is_trivially_assignable_v<_Tp, _Up>' previously declared here
3230 | inline constexpr bool is_trivially_assignable_v =
| ^~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:290:25: error: redefinition of 'template<class T> constexpr const bool std::is_trivially_copy_assignable_v'
290 | inline constexpr bool is_trivially_copy_assignable_v
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3233:25: note: 'template<class _Tp> constexpr const bool std::is_trivially_copy_assignable_v<_Tp>' previously declared here
3233 | inline constexpr bool is_trivially_copy_assignable_v =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:293:25: error: redefinition of 'template<class T> constexpr const bool std::is_trivially_move_assignable_v'
293 | inline constexpr bool is_trivially_move_assignable_v
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3236:25: note: 'template<class _Tp> constexpr const bool std::is_trivially_move_assignable_v<_Tp>' previously declared here
3236 | inline constexpr bool is_trivially_move_assignable_v =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:296:25: error: redefinition of 'template<class T> constexpr const bool std::is_trivially_destructible_v'
296 | inline constexpr bool is_trivially_destructible_v = is_trivially_destructible<T>::value;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3239:25: note: 'template<class _Tp> constexpr const bool std::is_trivially_destructible_v<_Tp>' previously declared here
3239 | inline constexpr bool is_trivially_destructible_v =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:298:25: error: redefinition of 'template<class T, class ... Args> constexpr const bool std::is_nothrow_constructible_v'
298 | inline constexpr bool is_nothrow_constructible_v
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3242:25: note: 'template<class _Tp, class ... _Args> constexpr const bool std::is_nothrow_constructible_v<_Tp, _Args ...>' previously declared here
3242 | inline constexpr bool is_nothrow_constructible_v =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:301:25: error: redefinition of 'template<class T> constexpr const bool std::is_nothrow_default_constructible_v'
301 | inline constexpr bool is_nothrow_default_constructible_v
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3245:25: note: 'template<class _Tp> constexpr const bool std::is_nothrow_default_constructible_v<_Tp>' previously declared here
3245 | inline constexpr bool is_nothrow_default_constructible_v =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:304:25: error: redefinition of 'template<class T> constexpr const bool std::is_nothrow_copy_constructible_v'
304 | inline constexpr bool is_nothrow_copy_constructible_v
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3248:25: note: 'template<class _Tp> constexpr const bool std::is_nothrow_copy_constructible_v<_Tp>' previously declared here
3248 | inline constexpr bool is_nothrow_copy_constructible_v =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:307:25: error: redefinition of 'template<class T> constexpr const bool std::is_nothrow_move_constructible_v'
307 | inline constexpr bool is_nothrow_move_constructible_v
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3251:25: note: 'template<class _Tp> constexpr const bool std::is_nothrow_move_constructible_v<_Tp>' previously declared here
3251 | inline constexpr bool is_nothrow_move_constructible_v =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:310:25: error: redefinition of 'template<class T, class U> constexpr const bool std::is_nothrow_assignable_v'
310 | inline constexpr bool is_nothrow_assignable_v = is_nothrow_assignable<T, U>::value;
| ^~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3254:25: note: 'template<class _Tp, class _Up> constexpr const bool std::is_nothrow_assignable_v<_Tp, _Up>' previously declared here
3254 | inline constexpr bool is_nothrow_assignable_v =
| ^~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:312:25: error: redefinition of 'template<class T> constexpr const bool std::is_nothrow_copy_assignable_v'
312 | inline constexpr bool is_nothrow_copy_assignable_v = is_nothrow_copy_assignable<T>::value;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3257:25: note: 'template<class _Tp> constexpr const bool std::is_nothrow_copy_assignable_v<_Tp>' previously declared here
3257 | inline constexpr bool is_nothrow_copy_assignable_v =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:314:25: error: redefinition of 'template<class T> constexpr const bool std::is_nothrow_move_assignable_v'
314 | inline constexpr bool is_nothrow_move_assignable_v = is_nothrow_move_assignable<T>::value;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3260:25: note: 'template<class _Tp> constexpr const bool std::is_nothrow_move_assignable_v<_Tp>' previously declared here
3260 | inline constexpr bool is_nothrow_move_assignable_v =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:316:25: error: redefinition of 'template<class T, class U> constexpr const bool std::is_nothrow_swappable_with_v'
316 | inline constexpr bool is_nothrow_swappable_with_v = is_nothrow_swappable_with<T, U>::value;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:2896:38: note: 'template<class _Tp, class _Up> constexpr const bool std::is_nothrow_swappable_with_v<_Tp, _Up>' previously declared here
2896 | _GLIBCXX17_INLINE constexpr bool is_nothrow_swappable_with_v =
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:318:25: error: redefinition of 'template<class T> constexpr const bool std::is_nothrow_swappable_v'
318 | inline constexpr bool is_nothrow_swappable_v = is_nothrow_swappable<T>::value;
| ^~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:2800:38: note: 'template<class _Tp> constexpr const bool std::is_nothrow_swappable_v<_Tp>' previously declared here
2800 | _GLIBCXX17_INLINE constexpr bool is_nothrow_swappable_v =
| ^~~~~~~~~~~~~~~~~~~~~~
p635.cpp:320:25: error: redefinition of 'template<class T> constexpr const bool std::is_nothrow_destructible_v'
320 | inline constexpr bool is_nothrow_destructible_v = is_nothrow_destructible<T>::value;
| ^~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3263:25: note: 'template<class _Tp> constexpr const bool std::is_nothrow_destructible_v<_Tp>' previously declared here
3263 | inline constexpr bool is_nothrow_destructible_v =
| ^~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:322:25: error: redefinition of 'template<class T> constexpr const bool std::has_virtual_destructor_v'
322 | inline constexpr bool has_virtual_destructor_v = has_virtual_destructor<T>::value;
| ^~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3266:25: note: 'template<class _Tp> constexpr const bool std::has_virtual_destructor_v<_Tp>' previously declared here
3266 | inline constexpr bool has_virtual_destructor_v =
| ^~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:324:25: error: redefinition of 'template<class T> constexpr const bool std::has_unique_object_representations_v'
324 | inline constexpr bool has_unique_object_representations_v
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3314:27: note: 'template<class _Tp> constexpr const bool std::has_unique_object_representations_v<_Tp>' previously declared here
3314 | inline constexpr bool has_unique_object_representations_v
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:334:27: error: redefinition of 'template<class T> constexpr const std::size_t std::alignment_of_v'
334 | inline constexpr size_t alignment_of_v = alignment_of<T>::value;
| ^~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3269:27: note: 'template<class _Tp> constexpr const std::size_t std::alignment_of_v<_Tp>' previously declared here
3269 | inline constexpr size_t alignment_of_v = alignment_of<_Tp>::value;
| ^~~~~~~~~~~~~~
p635.cpp:336:27: error: redefinition of 'template<class T> constexpr const std::size_t std::rank_v'
336 | inline constexpr size_t rank_v = rank<T>::value;
| ^~~~~~
/usr/local/include/c++/12.1.0/type_traits:3271:27: note: 'template<class _Tp> constexpr const std::size_t std::rank_v<_Tp>' previously declared here
3271 | inline constexpr size_t rank_v = rank<_Tp>::value;
| ^~~~~~
p635.cpp:338:27: error: redefinition of 'template<class T, unsigned int I> constexpr const std::size_t std::extent_v'
338 | inline constexpr size_t extent_v = extent<T, I>::value;
| ^~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3273:27: note: 'template<class _Tp, unsigned int _Idx> constexpr const std::size_t std::extent_v<_Tp, _Idx>' previously declared here
3273 | inline constexpr size_t extent_v = extent<_Tp, _Idx>::value;
| ^~~~~~~~
p635.cpp:341:25: error: redefinition of 'template<class T, class U> constexpr const bool std::is_same_v'
341 | inline constexpr bool is_same_v = is_same<T, U>::value;
| ^~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3276:25: note: 'template<class _Tp, class _Up> constexpr const bool std::is_same_v<_Tp, _Up>' previously declared here
3276 | inline constexpr bool is_same_v = __is_same(_Tp, _Up);
| ^~~~~~~~~
p635.cpp:343:25: error: redefinition of 'template<class Base, class Derived> constexpr const bool std::is_base_of_v'
343 | inline constexpr bool is_base_of_v = is_base_of<Base, Derived>::value;
| ^~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3282:25: note: 'template<class _Base, class _Derived> constexpr const bool std::is_base_of_v<_Base, _Derived>' previously declared here
3282 | inline constexpr bool is_base_of_v = is_base_of<_Base, _Derived>::value;
| ^~~~~~~~~~~~
p635.cpp:345:25: error: redefinition of 'template<class From, class To> constexpr const bool std::is_convertible_v'
345 | inline constexpr bool is_convertible_v = is_convertible<From, To>::value;
| ^~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3284:25: note: 'template<class _From, class _To> constexpr const bool std::is_convertible_v<_From, _To>' previously declared here
3284 | inline constexpr bool is_convertible_v = is_convertible<_From, _To>::value;
| ^~~~~~~~~~~~~~~~
p635.cpp:347:25: error: redefinition of 'template<class From, class To> constexpr const bool std::is_nothrow_convertible_v'
347 | inline constexpr bool is_nothrow_convertible_v = is_nothrow_convertible<From, To>::value;
| ^~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:1536:27: note: 'template<class _From, class _To> constexpr const bool std::is_nothrow_convertible_v<_From, _To>' previously declared here
1536 | inline constexpr bool is_nothrow_convertible_v
| ^~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:349:25: error: redefinition of 'template<class T, class U> constexpr const bool std::is_layout_compatible_v'
349 | inline constexpr bool is_layout_compatible_v = is_layout_compatible<T, U>::value;
| ^~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3438:20: note: 'template<class _Tp, class _Up> constexpr const bool std::is_layout_compatible_v<_Tp, _Up>' previously declared here
3438 | constexpr bool is_layout_compatible_v
| ^~~~~~~~~~~~~~~~~~~~~~
p635.cpp:351:25: error: redefinition of 'template<class Base, class Derived> constexpr const bool std::is_pointer_interconvertible_base_of_v'
351 | inline constexpr bool is_pointer_interconvertible_base_of_v
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3463:20: note: 'template<class _Base, class _Derived> constexpr const bool std::is_pointer_interconvertible_base_of_v<_Base, _Derived>' previously declared here
3463 | constexpr bool is_pointer_interconvertible_base_of_v
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:354:25: error: redefinition of 'template<class Fn, class ... ArgTypes> constexpr const bool std::is_invocable_v'
354 | inline constexpr bool is_invocable_v = is_invocable<Fn, ArgTypes...>::value;
| ^~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3286:25: note: 'template<class _Fn, class ... _Args> constexpr const bool std::is_invocable_v<_Fn, _Args ...>' previously declared here
3286 | inline constexpr bool is_invocable_v = is_invocable<_Fn, _Args...>::value;
| ^~~~~~~~~~~~~~
p635.cpp:356:25: error: redefinition of 'template<class R, class Fn, class ... ArgTypes> constexpr const bool std::is_invocable_r_v'
356 | inline constexpr bool is_invocable_r_v = is_invocable_r<R, Fn, ArgTypes...>::value;
| ^~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3291:25: note: 'template<class _Ret, class _Fn, class ... _Args> constexpr const bool std::is_invocable_r_v<_Ret, _Fn, _Args ...>' previously declared here
3291 | inline constexpr bool is_invocable_r_v
| ^~~~~~~~~~~~~~~~
p635.cpp:358:25: error: redefinition of 'template<class Fn, class ... ArgTypes> constexpr const bool std::is_nothrow_invocable_v'
358 | inline constexpr bool is_nothrow_invocable_v = is_nothrow_invocable<Fn, ArgTypes...>::value;
| ^~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3288:25: note: 'template<class _Fn, class ... _Args> constexpr const bool std::is_nothrow_invocable_v<_Fn, _Args ...>' previously declared here
3288 | inline constexpr bool is_nothrow_invocable_v
| ^~~~~~~~~~~~~~~~~~~~~~
p635.cpp:360:25: error: redefinition of 'template<class R, class Fn, class ... ArgTypes> constexpr const bool std::is_nothrow_invocable_r_v'
360 | inline constexpr bool is_nothrow_invocable_r_v
| ^~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:3294:25: note: 'template<class _Ret, class _Fn, class ... _Args> constexpr const bool std::is_nothrow_invocable_r_v<_Ret, _Fn, _Args ...>' previously declared here
3294 | inline constexpr bool is_nothrow_invocable_r_v
| ^~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:364:25: error: redefinition of 'template<class ... B> constexpr const bool std::conjunction_v'
364 | inline constexpr bool conjunction_v = conjunction<B...>::value;
| ^~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:212:27: note: 'template<class ... _Bn> constexpr const bool std::conjunction_v<_Bn ...>' previously declared here
212 | inline constexpr bool conjunction_v = conjunction<_Bn...>::value;
| ^~~~~~~~~~~~~
p635.cpp:366:25: error: redefinition of 'template<class ... B> constexpr const bool std::disjunction_v'
366 | inline constexpr bool disjunction_v = disjunction<B...>::value;
| ^~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:215:27: note: 'template<class ... _Bn> constexpr const bool std::disjunction_v<_Bn ...>' previously declared here
215 | inline constexpr bool disjunction_v = disjunction<_Bn...>::value;
| ^~~~~~~~~~~~~
p635.cpp:368:25: error: redefinition of 'template<class B> constexpr const bool std::negation_v'
368 | inline constexpr bool negation_v = negation<B>::value;
| ^~~~~~~~~~
/usr/local/include/c++/12.1.0/type_traits:218:27: note: 'template<class _Pp> constexpr const bool std::negation_v<_Pp>' previously declared here
218 | inline constexpr bool negation_v = negation<_Pp>::value;
| ^~~~~~~~~~
p635.cpp:370:61: error: 'constexpr const bool std::is_pointer_interconvertible_with_class' redeclared as different kind of entity
370 | constexpr bool is_pointer_interconvertible_with_class(M S::*m) noexcept;
| ^
/usr/local/include/c++/12.1.0/type_traits:3474:5: note: previous declaration 'template<class _Tp, class _Mem> constexpr bool std::is_pointer_interconvertible_with_class(_Mem _Tp::*)'
3474 | is_pointer_interconvertible_with_class(_Mem _Tp::*__mp) noexcept
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p635.cpp:370:61: error: 'M' was not declared in this scope
370 | constexpr bool is_pointer_interconvertible_with_class(M S::*m) noexcept;
| ^
検討事項(agenda)
コンパイルエラーを取るか、コンパイルエラーの理由を解説する。
参考資料(reference)
cpprefjp - C++日本語リファレンス
コンパイラの実装状況
typedef は C++11 ではオワコン
C99からC++14を駆け抜けるC++講座
@kazuo_reve 私が効果を確認した「小川メソッド」
自己参照(self reference)
ockerにclang
docker gnu(gcc/g++) and llvm(clang/clang++)
コンパイル用shell script C版(clangとgcc)とC++版(clang++とg++)
C++N4910:2022 tag follower 200人超えました。ありがとうございます。
C++N4910:2022 tag follower 200人超えました。ありがとうございます。
コピペコンパイルエラーあるある
C++ Error Message Collection(1)does not name a type, 11 articles
dockerにclang
docker gnu(gcc/g++) and llvm(clang/clang++)
コンパイル用shell script C版(clangとgcc)とC++版(clang++とg++)
Compare the contents of C++N4910:2022, C++N4741:2018 and C++N4606:2015
C++ sample list
clang++, g++コンパイルエラー方針の違いの例
astyle 使ってみた
C++N4606 Working Draft 2016, ISO/IEC 14882, C++ standardのコード断片をコンパイルするためにしていること
https://qiita.com/kaizen_nagoya/items/a8d7ee2f2e29e76c19c1
コンパイル用shell script C版(clangとgcc)とC++版(clang++とg++)
https://qiita.com/kaizen_nagoya/items/74220c0577a512c2d7da
Clang/Clang++(LLVM) gcc/g++(GNU) コンパイラ警告等比較
https://qiita.com/kaizen_nagoya/items/9a82b958cc3aeef0403f
C++2003とC++2017でコンパイルエラーになるならない事例集
https://qiita.com/kaizen_nagoya/items/a13ea3823441c430edff
Qiitaに投稿するCのStyle例(暫定)
https://qiita.com/kaizen_nagoya/items/946df1528a6a1ef2bc0d
cpprefjpのdecltypeをコンパイル試験
https://qiita.com/kaizen_nagoya/items/090909af702f0d5d8a67
MISRA C++ 5-0-16
https://qiita.com/kaizen_nagoya/items/7df2d4e05db724752a74
C++ Templates Part1 BASICS Chapter 3. Class Templates 3.2 Use of Class Template Stack stack1test.cpp
https://qiita.com/kaizen_nagoya/items/cd5fc49106fad5a4e9ed
ISO/IEC TS 17961:2013 C Secure Coding Rules(1) All list(to be confirmed)
https://qiita.com/kaizen_nagoya/items/54e056195c4f11b850a1
C言語(C++)に対する誤解、曲解、無理解、爽快。
https://qiita.com/kaizen_nagoya/items/3f3992c9722c1cee2e3a
C Puzzle Bookの有り難み5つ、C言語規格及びCコンパイラの特性を認識
https://qiita.com/kaizen_nagoya/items/d89a48c1536a02ecdec9
'wchar.h' file not found で困った clang++ macOS
https://qiita.com/kaizen_nagoya/items/de15cd46d657517fac11
Open POSIX Test Suiteの使い方を調べはじめました
https://qiita.com/kaizen_nagoya/items/644d5e407f5faf96e6dc
MISRA-C 2012 Referenceに掲載している文献の入手可能性を確認
https://qiita.com/kaizen_nagoya/items/96dc8b125e462d5575bb
どうやって MISRA Example Suiteをコンパイルするか
https://qiita.com/kaizen_nagoya/items/fbdbff5ff696e2ca7f00
MISRA C まとめ #include
https://qiita.com/kaizen_nagoya/items/f1a79a7cbd281607c7c9
「C++完全理解ガイド」の同意できること上位10
https://qiita.com/kaizen_nagoya/items/aa5744e0c4a8618c7671
DoCAP(ドゥーキャップ)って何ですか?
小川メソッド 覚え(書きかけ)
<この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。>
文書履歴(document history)
ver. 0.01 初稿 20220723