Skip to content

Instantly share code, notes, and snippets.

View EricWF's full-sized avatar

Eric EricWF

View GitHub Profile
In file included from /opt/gcc-tot/include/c++/7.0.0/bits/move.h:57:0,
from /opt/gcc-tot/include/c++/7.0.0/bits/stl_pair.h:59,
from /opt/gcc-tot/include/c++/7.0.0/utility:70,
from /opt/gcc-tot/include/c++/7.0.0/tuple:38,
from test.pass.cpp:3:
/opt/gcc-tot/include/c++/7.0.0/type_traits: In instantiation of ‘struct std::__and_<std::is_constructible<dynamic, Optional<std::tuple<dynamic> >&&> >’:
/opt/gcc-tot/include/c++/7.0.0/tuple:485:68: required from ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_MoveConstructibleTuple() [with _UElements = {Optional<std::tuple<dynamic> >}; bool <anonymous> = true; _Elements = {dynamic}]’
/opt/gcc-tot/include/c++/7.0.0/tuple:641:59: required by substitution of ‘template<class ... _UElements, typename std::enable_if<((std::_TC<((1ul == sizeof... (_UElements)) && std::_TC<(sizeof... (_UElements) == 1), dynamic>::_NotSameTuple<_UElements ...>()), dynamic>::_MoveConstructibleTuple<_UElements ...>()
In file included from test.pass.cpp:3:
In file included from /opt/gcc-tot/include/c++/7.0.0/tuple:38:
In file included from /opt/gcc-tot/include/c++/7.0.0/utility:70:
In file included from /opt/gcc-tot/include/c++/7.0.0/bits/stl_pair.h:59:
In file included from /opt/gcc-tot/include/c++/7.0.0/bits/move.h:57:
/opt/gcc-tot/include/c++/7.0.0/type_traits:139:14: error: base class has incomplete type
: public _B1
~~~~~~~^~~
/opt/gcc-tot/include/c++/7.0.0/tuple:485:14: note: in instantiation of template class 'std::__and_<std::is_constructible<dynamic, Optional<std::tuple<dynamic> > &&> >' requested here
return __and_<is_constructible<_Elements, _UElements&&>...>::value;
In file included from PR29123_implicit_constructor_sfinae.pass.cpp:3:
/opt/gcc-tot/include/c++/7.0.0/tuple:485:68: error: no member named 'value' in 'std::__and_<std::is_constructible<dynamic, Optional<std::tuple<dynamic> > &&> >'
return __and_<is_constructible<_Elements, _UElements&&>...>::value;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
/opt/gcc-tot/include/c++/7.0.0/tuple:641:21: note: in instantiation of function template specialization 'std::_TC<true, dynamic>::_MoveConstructibleTuple<Optional<std::tuple<dynamic> >
>' requested here
_MoveConstructibleTuple<_UElements...>()
^
/opt/gcc-tot/include/c++/7.0.0/tuple:646:19: note: while substituting prior template arguments into non-type template parameter [with _UElements = <Optional<std::tuple<dynamic> >>]
constexpr tuple(_UElements&&... __elements)
diff --git a/include/optional b/include/optional
index d60f375..bcf58ab 100644
--- a/include/optional
+++ b/include/optional
@@ -1,1144 +1,1205 @@
// -*- C++ -*-
//===-------------------------- optional ----------------------------------===//
//
// The LLVM Compiler Infrastructure
//
diff --git a/include/optional b/include/optional
index d60f375..cfccc42 100644
--- a/include/optional
+++ b/include/optional
@@ -1,1144 +1,1237 @@
// -*- C++ -*-
//===-------------------------- optional ----------------------------------===//
//
// The LLVM Compiler Infrastructure
//
diff --git a/include/optional b/include/optional
index 3f67363..438fed2 100644
--- a/include/optional
+++ b/include/optional
@@ -184,13 +184,31 @@ struct nullopt_t
/* inline */ constexpr nullopt_t nullopt{nullopt_t::__secret_tag{}, nullopt_t::__secret_tag{}};
+template <class _Tp, bool = is_trivially_copyable<_Tp>::value>
+struct __optional_value {
diff --git a/include/optional b/include/optional
index 3315334..2f76429 100644
--- a/include/optional
+++ b/include/optional
@@ -384,70 +384,17 @@ constexpr bool _Is_specialization = false;
template <class... _Args, template <class...> class _Template>
constexpr bool _Is_specialization<_Template<_Args...>, _Template> = true;
-template <bool _CanCopy, bool _CanMove>
-struct __optional_sfinae_ctor_base;
diff --git a/include/optional b/include/optional
index 298f91a..9675ee7 100644
--- a/include/optional
+++ b/include/optional
@@ -241,7 +241,7 @@ struct __optional_destruct_base<_Tp, true>
__engaged_(true) {}
};
-template <class _Tp>
+template <class _Tp, bool = is_trivially_copyable<_Tp>::value>
//===----------------------------------------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// UNSUPPORTED: c++98, c++03, c++11, c++14
diff --git a/test/support/nasty_macros.hpp b/test/support/nasty_macros.hpp
index 074853e..80f903e 100644
--- a/test/support/nasty_macros.hpp
+++ b/test/support/nasty_macros.hpp
@@ -37,4 +37,10 @@
#define _Y NASTY_MACRO
#define _Z NASTY_MACRO
+template <class T, class U>
+void forward(U&&) = delete;