diff --git a/include/forward_list b/include/forward_list index 398226b8d..72d31dc7e 100644 --- a/include/forward_list +++ b/include/forward_list @@ -188,7 +188,6 @@ template struct __forward_list_node; template struct __forward_begin_node { - typedef __forward_begin_node __self; typedef _NodePtr pointer; pointer __next_; @@ -197,16 +196,22 @@ struct __forward_begin_node }; template -struct __forward_list_node - : public __forward_begin_node - < - typename pointer_traits<_VoidPtr>::template +struct _LIBCPP_HIDDEN __begin_node_of +{ + typedef __forward_begin_node + < + typename pointer_traits<_VoidPtr>::template #ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES - rebind<__forward_list_node<_Tp, _VoidPtr> > + rebind<__forward_list_node<_Tp, _VoidPtr> > #else - rebind<__forward_list_node<_Tp, _VoidPtr> >::other + rebind<__forward_list_node<_Tp, _VoidPtr> >::other #endif - > + > type; +}; + +template +struct __forward_list_node + : public __begin_node_of<_Tp, _VoidPtr>::type { typedef _Tp value_type; @@ -357,9 +362,9 @@ protected: typedef _Tp value_type; typedef _Alloc allocator_type; - typedef typename allocator_traits::void_pointer void_pointer; - typedef __forward_list_node __node; - typedef typename __node::__self __begin_node; + typedef typename allocator_traits::void_pointer void_pointer; + typedef __forward_list_node __node; + typedef typename __begin_node_of::type __begin_node; typedef typename allocator_traits::template #ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES rebind_alloc<__node> diff --git a/test/containers/sequences/forwardlist/forwardlist.cons/default_recursive.pass.cpp b/test/containers/sequences/forwardlist/forwardlist.cons/default_recursive.pass.cpp new file mode 100644 index 000000000..5ff00e6fe --- /dev/null +++ b/test/containers/sequences/forwardlist/forwardlist.cons/default_recursive.pass.cpp @@ -0,0 +1,25 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// + +// class forward_list + +// forward_list(); + +#include + +struct X +{ + std::forward_list q; +}; + +int main() +{ +}