Author: marshall Date: Tue Mar 20 17:36:05 2018 New Revision: 328064 URL: http://llvm.org/viewvc/llvm-project?rev=328064&view=rev Log: Implement LWG3034: P0767R1 breaks previously-standard-layout types
Added: libcxx/trunk/test/std/strings/basic.string/char.bad.fail.cpp libcxx/trunk/test/std/strings/string.view/char.bad.fail.cpp Modified: libcxx/trunk/include/string libcxx/trunk/include/string_view libcxx/trunk/test/std/depr/depr.c.headers/stddef_h.pass.cpp libcxx/trunk/test/std/language.support/support.types/max_align_t.pass.cpp libcxx/trunk/test/std/utilities/meta/meta.trans/meta.trans.other/aligned_storage.pass.cpp libcxx/trunk/test/std/utilities/meta/meta.trans/meta.trans.other/aligned_union.pass.cpp libcxx/trunk/www/cxx2a_status.html Modified: libcxx/trunk/include/string URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/string?rev=328064&r1=328063&r2=328064&view=diff ============================================================================== --- libcxx/trunk/include/string (original) +++ libcxx/trunk/include/string Tue Mar 20 17:36:05 2018 @@ -658,10 +658,12 @@ public: typedef typename __alloc_traits::pointer pointer; typedef typename __alloc_traits::const_pointer const_pointer; - static_assert(is_trivial<value_type>::value, "Character type of basic_string must be trivial"); - static_assert((is_same<_CharT, typename traits_type::char_type>::value), + static_assert((!is_array<value_type>::value), "Character type of basic_string must not be an array"); + static_assert(( is_standard_layout<value_type>::value), "Character type of basic_string must be standard-layout"); + static_assert(( is_trivial<value_type>::value), "Character type of basic_string must be trivial"); + static_assert(( is_same<_CharT, typename traits_type::char_type>::value), "traits_type::char_type must be the same type as CharT"); - static_assert((is_same<typename allocator_type::value_type, value_type>::value), + static_assert(( is_same<typename allocator_type::value_type, value_type>::value), "Allocator::value_type must be same type as value_type"); #if defined(_LIBCPP_RAW_ITERATORS) typedef pointer iterator; Modified: libcxx/trunk/include/string_view URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/string_view?rev=328064&r1=328063&r2=328064&view=diff ============================================================================== --- libcxx/trunk/include/string_view (original) +++ libcxx/trunk/include/string_view Tue Mar 20 17:36:05 2018 @@ -208,7 +208,9 @@ public: typedef ptrdiff_t difference_type; static _LIBCPP_CONSTEXPR const size_type npos = -1; // size_type(-1); - static_assert(is_trivial<value_type>::value, "Character type of basic_string_view must be trivial"); + static_assert((!is_array<value_type>::value), "Character type of basic_string_view must not be an array"); + static_assert(( is_standard_layout<value_type>::value), "Character type of basic_string_view must be standard-layout"); + static_assert(( is_trivial<value_type>::value), "Character type of basic_string_view must be trivial"); static_assert((is_same<_CharT, typename traits_type::char_type>::value), "traits_type::char_type must be the same type as CharT"); Modified: libcxx/trunk/test/std/depr/depr.c.headers/stddef_h.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/depr/depr.c.headers/stddef_h.pass.cpp?rev=328064&r1=328063&r2=328064&view=diff ============================================================================== --- libcxx/trunk/test/std/depr/depr.c.headers/stddef_h.pass.cpp (original) +++ libcxx/trunk/test/std/depr/depr.c.headers/stddef_h.pass.cpp Tue Mar 20 17:36:05 2018 @@ -48,6 +48,8 @@ int main() // P0767 static_assert(std::is_trivial<max_align_t>::value, "std::is_trivial<max_align_t>::value"); + static_assert(std::is_standard_layout<max_align_t>::value, + "std::is_standard_layout<max_align_t>::value"); #else static_assert(std::is_pod<max_align_t>::value, "std::is_pod<max_align_t>::value"); Modified: libcxx/trunk/test/std/language.support/support.types/max_align_t.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.types/max_align_t.pass.cpp?rev=328064&r1=328063&r2=328064&view=diff ============================================================================== --- libcxx/trunk/test/std/language.support/support.types/max_align_t.pass.cpp (original) +++ libcxx/trunk/test/std/language.support/support.types/max_align_t.pass.cpp Tue Mar 20 17:36:05 2018 @@ -10,18 +10,21 @@ #include <cstddef> #include <type_traits> -// max_align_t is a POD type whose alignment requirement is at least as -// great as that of every scalar type +// max_align_t is a trivial standard-layout type whose alignment requirement +// is at least as great as that of every scalar type #include <stdio.h> #include "test_macros.h" int main() { + #if TEST_STD_VER > 17 // P0767 static_assert(std::is_trivial<std::max_align_t>::value, "std::is_trivial<std::max_align_t>::value"); + static_assert(std::is_standard_layout<std::max_align_t>::value, + "std::is_standard_layout<std::max_align_t>::value"); #else static_assert(std::is_pod<std::max_align_t>::value, "std::is_pod<std::max_align_t>::value"); Added: libcxx/trunk/test/std/strings/basic.string/char.bad.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/strings/basic.string/char.bad.fail.cpp?rev=328064&view=auto ============================================================================== --- libcxx/trunk/test/std/strings/basic.string/char.bad.fail.cpp (added) +++ libcxx/trunk/test/std/strings/basic.string/char.bad.fail.cpp Tue Mar 20 17:36:05 2018 @@ -0,0 +1,53 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// <string> +// ... manipulating sequences of any non-array trivial standard-layout types. + +#include <string> +#include "test_traits.h" + +struct NotTrivial { + NotTrivial() : value(3) {} + int value; +}; + +struct NotStandardLayout { +public: + NotStandardLayout() : one(1), two(2) {} + int sum() const { return one + two; } // silences "unused field 'two' warning" + int one; +private: + int two; +}; + +int main() +{ + { +// array + typedef char C[3]; + static_assert(std::is_array<C>::value, ""); + std::basic_string<C, test_traits<C> > s; +// expected-error-re@string:* {{static_assert failed{{.*}} "Character type of basic_string must not be an array"}} + } + + { +// not trivial + static_assert(!std::is_trivial<NotTrivial>::value, ""); + std::basic_string<NotTrivial, test_traits<NotTrivial> > s; +// expected-error-re@string:* {{static_assert failed{{.*}} "Character type of basic_string must be trivial"}} + } + + { +// not standard layout + static_assert(!std::is_standard_layout<NotStandardLayout>::value, ""); + std::basic_string<NotStandardLayout, test_traits<NotStandardLayout> > s; +// expected-error-re@string:* {{static_assert failed{{.*}} "Character type of basic_string must be standard-layout"}} + } +} Added: libcxx/trunk/test/std/strings/string.view/char.bad.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/strings/string.view/char.bad.fail.cpp?rev=328064&view=auto ============================================================================== --- libcxx/trunk/test/std/strings/string.view/char.bad.fail.cpp (added) +++ libcxx/trunk/test/std/strings/string.view/char.bad.fail.cpp Tue Mar 20 17:36:05 2018 @@ -0,0 +1,53 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// <string_view> +// ... manipulating sequences of any non-array trivial standard-layout types. + +#include <string> +#include "../basic.string/test_traits.h" + +struct NotTrivial { + NotTrivial() : value(3) {} + int value; +}; + +struct NotStandardLayout { +public: + NotStandardLayout() : one(1), two(2) {} + int sum() const { return one + two; } // silences "unused field 'two' warning" + int one; +private: + int two; +}; + +int main() +{ + { +// array + typedef char C[3]; + static_assert(std::is_array<C>::value, ""); + std::basic_string_view<C, test_traits<C> > sv; +// expected-error-re@string_view:* {{static_assert failed{{.*}} "Character type of basic_string_view must not be an array"}} + } + + { +// not trivial + static_assert(!std::is_trivial<NotTrivial>::value, ""); + std::basic_string_view<NotTrivial, test_traits<NotTrivial> > sv; +// expected-error-re@string_view:* {{static_assert failed{{.*}} "Character type of basic_string_view must be trivial"}} + } + + { +// not standard layout + static_assert(!std::is_standard_layout<NotStandardLayout>::value, ""); + std::basic_string_view<NotStandardLayout, test_traits<NotStandardLayout> > sv; +// expected-error-re@string_view:* {{static_assert failed{{.*}} "Character type of basic_string_view must be standard-layout"}} + } +} Modified: libcxx/trunk/test/std/utilities/meta/meta.trans/meta.trans.other/aligned_storage.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/meta/meta.trans/meta.trans.other/aligned_storage.pass.cpp?rev=328064&r1=328063&r2=328064&view=diff ============================================================================== --- libcxx/trunk/test/std/utilities/meta/meta.trans/meta.trans.other/aligned_storage.pass.cpp (original) +++ libcxx/trunk/test/std/utilities/meta/meta.trans/meta.trans.other/aligned_storage.pass.cpp Tue Mar 20 17:36:05 2018 @@ -10,6 +10,9 @@ // type_traits // aligned_storage +// +// Issue 3034 added: +// The member typedef type shall be a trivial standard-layout type. #include <type_traits> #include <cstddef> // for std::max_align_t @@ -28,6 +31,8 @@ int main() #else static_assert(std::is_pod<T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 1, ""); static_assert(sizeof(T1) == 10, ""); } @@ -42,6 +47,8 @@ int main() #else static_assert(std::is_pod<T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 2, ""); static_assert(sizeof(T1) == 10, ""); } @@ -56,6 +63,8 @@ int main() #else static_assert(std::is_pod<T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 4, ""); static_assert(sizeof(T1) == 12, ""); } @@ -70,6 +79,8 @@ int main() #else static_assert(std::is_pod<T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 8, ""); static_assert(sizeof(T1) == 16, ""); } @@ -84,6 +95,8 @@ int main() #else static_assert(std::is_pod<T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 16, ""); static_assert(sizeof(T1) == 16, ""); } @@ -98,6 +111,8 @@ int main() #else static_assert(std::is_pod<T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 32, ""); static_assert(sizeof(T1) == 32, ""); } @@ -112,6 +127,8 @@ int main() #else static_assert(std::is_pod<T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 32, ""); static_assert(sizeof(T1) == 32, ""); } @@ -126,6 +143,8 @@ int main() #else static_assert(std::is_pod<T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 32, ""); static_assert(sizeof(T1) == 64, ""); } @@ -140,6 +159,8 @@ int main() #else static_assert(std::is_pod<T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 16, ""); static_assert(sizeof(T1) == 16, ""); } @@ -154,6 +175,8 @@ int main() #else static_assert(std::is_pod<T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 1, ""); static_assert(sizeof(T1) == 1, ""); } @@ -168,6 +191,8 @@ int main() #else static_assert(std::is_pod<T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 2, ""); static_assert(sizeof(T1) == 2, ""); } @@ -182,6 +207,8 @@ int main() #else static_assert(std::is_pod<T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 2, ""); static_assert(sizeof(T1) == 4, ""); } @@ -196,6 +223,8 @@ int main() #else static_assert(std::is_pod<T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 4, ""); static_assert(sizeof(T1) == 4, ""); } @@ -210,6 +239,8 @@ int main() #else static_assert(std::is_pod<T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 4, ""); static_assert(sizeof(T1) == 8, ""); } @@ -218,6 +249,8 @@ int main() #if TEST_STD_VER > 11 static_assert(std::is_same<std::aligned_storage_t<7>, T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 4, ""); static_assert(sizeof(T1) == 8, ""); } @@ -232,6 +265,8 @@ int main() #else static_assert(std::is_pod<T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 8, ""); static_assert(sizeof(T1) == 8, ""); } @@ -246,6 +281,8 @@ int main() #else static_assert(std::is_pod<T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 8, ""); static_assert(sizeof(T1) == 16, ""); } @@ -260,6 +297,8 @@ int main() #else static_assert(std::is_pod<T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 8, ""); static_assert(sizeof(T1) == 16, ""); } @@ -274,6 +313,8 @@ int main() #if TEST_STD_VER > 11 static_assert(std::is_same<std::aligned_storage_t<16>, T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == alignof(std::max_align_t), ""); static_assert(sizeof(T1) == 16, ""); @@ -283,6 +324,8 @@ int main() #if TEST_STD_VER > 11 static_assert(std::is_same<std::aligned_storage_t<17>, T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == alignof(std::max_align_t), ""); static_assert(sizeof(T1) == 16 + alignof(std::max_align_t), ""); @@ -292,6 +335,8 @@ int main() #if TEST_STD_VER > 11 static_assert(std::is_same<std::aligned_storage_t<10>, T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 8, ""); static_assert(sizeof(T1) == 16, ""); } Modified: libcxx/trunk/test/std/utilities/meta/meta.trans/meta.trans.other/aligned_union.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/meta/meta.trans/meta.trans.other/aligned_union.pass.cpp?rev=328064&r1=328063&r2=328064&view=diff ============================================================================== --- libcxx/trunk/test/std/utilities/meta/meta.trans/meta.trans.other/aligned_union.pass.cpp (original) +++ libcxx/trunk/test/std/utilities/meta/meta.trans/meta.trans.other/aligned_union.pass.cpp Tue Mar 20 17:36:05 2018 @@ -13,6 +13,9 @@ // aligned_union<size_t Len, class ...Types> +// Issue 3034 added: +// The member typedef type shall be a trivial standard-layout type. + #include <type_traits> #include "test_macros.h" @@ -24,6 +27,8 @@ int main() #if TEST_STD_VER > 11 static_assert(std::is_same<std::aligned_union_t<10, char>, T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 1, ""); static_assert(sizeof(T1) == 10, ""); } @@ -32,6 +37,8 @@ int main() #if TEST_STD_VER > 11 static_assert(std::is_same<std::aligned_union_t<10, short>, T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 2, ""); static_assert(sizeof(T1) == 10, ""); } @@ -40,6 +47,8 @@ int main() #if TEST_STD_VER > 11 static_assert(std::is_same<std::aligned_union_t<10, int>, T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 4, ""); static_assert(sizeof(T1) == 12, ""); } @@ -48,6 +57,8 @@ int main() #if TEST_STD_VER > 11 static_assert(std::is_same<std::aligned_union_t<10, double>, T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 8, ""); static_assert(sizeof(T1) == 16, ""); } @@ -56,6 +67,8 @@ int main() #if TEST_STD_VER > 11 static_assert(std::is_same<std::aligned_union_t<10, short, char>, T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 2, ""); static_assert(sizeof(T1) == 10, ""); } @@ -64,6 +77,8 @@ int main() #if TEST_STD_VER > 11 static_assert(std::is_same<std::aligned_union_t<10, char, short>, T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 2, ""); static_assert(sizeof(T1) == 10, ""); } @@ -72,6 +87,8 @@ int main() #if TEST_STD_VER > 11 static_assert(std::is_same<std::aligned_union_t<2, int, char, short>, T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 4, ""); static_assert(sizeof(T1) == 4, ""); } @@ -80,6 +97,8 @@ int main() #if TEST_STD_VER > 11 static_assert(std::is_same<std::aligned_union_t<2, char, int, short >, T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 4, ""); static_assert(sizeof(T1) == 4, ""); } @@ -88,6 +107,8 @@ int main() #if TEST_STD_VER > 11 static_assert(std::is_same<std::aligned_union_t<2, char, short, int >, T1>::value, "" ); #endif + static_assert(std::is_trivial<T1>::value, ""); + static_assert(std::is_standard_layout<T1>::value, ""); static_assert(std::alignment_of<T1>::value == 4, ""); static_assert(sizeof(T1) == 4, ""); } Modified: libcxx/trunk/www/cxx2a_status.html URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/www/cxx2a_status.html?rev=328064&r1=328063&r2=328064&view=diff ============================================================================== --- libcxx/trunk/www/cxx2a_status.html (original) +++ libcxx/trunk/www/cxx2a_status.html Tue Mar 20 17:36:05 2018 @@ -166,10 +166,10 @@ <tr><td><a href="https://wg21.link/LWG3020">3020</a></td><td>[networking.ts] Remove spurious nested <tt>value_type</tt> buffer sequence requirement</td><td>Jacksonville</td><td></td></tr> <tr><td><a href="https://wg21.link/LWG3026">3026</a></td><td><tt>filesystem::weakly_canonical</tt> still defined in terms of <tt>canonical(p, base)</tt></td><td>Jacksonville</td><td></td></tr> <tr><td><a href="https://wg21.link/LWG3030">3030</a></td><td>Who shall meet the requirements of <tt>try_lock</tt>?</td><td>Jacksonville</td><td><i>Nothing to do</i></td></tr> - <tr><td><a href="https://wg21.link/LWG3034">3034</a></td><td>P0767R1 breaks previously-standard-layout types</td><td>Jacksonville</td><td></td></tr> - <tr><td><a href="https://wg21.link/LWG3035">3035</a></td><td><tt>std::allocator</tt>'s constructors should be <tt>constexpr</tt></td><td>Jacksonville</td><td></td></tr> - <tr><td><a href="https://wg21.link/LWG3039">3039</a></td><td>Unnecessary <tt>decay</tt> in <tt>thread</tt> and <tt>packaged_task</tt></td><td>Jacksonville</td><td></td></tr> - <tr><td><a href="https://wg21.link/LWG3041">3041</a></td><td>Unnecessary <tt>decay</tt> in <tt>reference_wrapper</tt></td><td>Jacksonville</td><td></td></tr> + <tr><td><a href="https://wg21.link/LWG3034">3034</a></td><td>P0767R1 breaks previously-standard-layout types</td><td>Jacksonville</td><td>Complete</td></tr> + <tr><td><a href="https://wg21.link/LWG3035">3035</a></td><td><tt>std::allocator</tt>'s constructors should be <tt>constexpr</tt></td><td>Jacksonville</td><td>Complete</td></tr> + <tr><td><a href="https://wg21.link/LWG3039">3039</a></td><td>Unnecessary <tt>decay</tt> in <tt>thread</tt> and <tt>packaged_task</tt></td><td>Jacksonville</td><td>Complete</td></tr> + <tr><td><a href="https://wg21.link/LWG3041">3041</a></td><td>Unnecessary <tt>decay</tt> in <tt>reference_wrapper</tt></td><td>Jacksonville</td><td>Complete</td></tr> <tr><td><a href="https://wg21.link/LWG3042">3042</a></td><td><tt>is_literal_type_v</tt> should be inline</td><td>Jacksonville</td><td>Complete</td></tr> <tr><td><a href="https://wg21.link/LWG3043">3043</a></td><td>Bogus postcondition for <tt>filesystem_error</tt> constructor</td><td>Jacksonville</td><td></td></tr> <tr><td><a href="https://wg21.link/LWG3045">3045</a></td><td><tt>atomic<<i>floating-point</i>></tt> doesn't have <tt>value_type</tt> or <tt>difference_type</tt></td><td>Jacksonville</td><td></td></tr> @@ -180,7 +180,7 @@ <!-- <tr><td></td><td></td><td></td><td></td></tr> --> </table> - <p>Last Updated: 18-Mar-2018</p> + <p>Last Updated: 20-Mar-2018</p> </div> </body> </html> _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits