diff mbox

[C++,testcase,committed] PR 57101

Message ID 51F2526C.2040301@oracle.com
State New
Headers show

Commit Message

Paolo Carlini July 26, 2013, 10:41 a.m. UTC
Hi,

I'm adding the testcase and keeping the PR open (the issue seems still 
present in 4_8-branch).

Thanks,
Paolo.

//////////////////////
2013-07-26  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/57101
	* g++.dg/cpp0x/pr57101.C: New.
diff mbox

Patch

Index: g++.dg/cpp0x/pr57101.C
===================================================================
--- g++.dg/cpp0x/pr57101.C	(revision 0)
+++ g++.dg/cpp0x/pr57101.C	(working copy)
@@ -0,0 +1,220 @@ 
+// { dg-options "-std=c++11 -fcompare-debug" }
+
+typedef long unsigned size_t;
+namespace
+{
+  template < typename _Tp, _Tp __v > struct integral_constant
+  {
+    static const _Tp value = __v;
+  };
+  typedef integral_constant < bool, false > false_type;
+  template < typename > struct remove_cv;
+  template < typename > struct __is_void_helper:false_type
+  {
+  };
+  template
+    <
+    typename
+    _Tp
+    >
+    struct
+    is_void:integral_constant
+    < bool, (__is_void_helper < typename remove_cv < _Tp >::type >::value) >
+  {
+  };
+  template < typename > struct is_function:false_type
+  {
+  };
+  template < typename _Tp > struct remove_const
+  {
+    typedef _Tp type;
+  };
+  template < typename _Tp > struct remove_volatile
+  {
+    typedef _Tp type;
+  };
+  template < typename _Tp > struct remove_cv
+  {
+    typedef
+      typename
+      remove_const < typename remove_volatile < _Tp >::type >::type type;
+  };
+  template < typename > struct is_lvalue_reference:false_type
+  {
+  };
+  template < typename _Tp, bool = is_void < _Tp >::value > struct __add_rvalue_reference_helper
+  {
+    typedef _Tp type;
+  };
+  template
+    <
+    typename
+    _Tp > struct add_rvalue_reference:__add_rvalue_reference_helper < _Tp >
+  {
+  };
+  template
+    < typename _Tp > typename add_rvalue_reference < _Tp >::type declval ();
+  template
+    <
+    typename,
+    typename
+    _To, bool = (is_function < _To >::value) > struct __is_convertible_helper;
+  template
+    <
+    typename
+    _From, typename _To > struct __is_convertible_helper <_From, _To, false >
+  {
+    static const bool __value = sizeof ((declval < _From > ()));
+  };
+  template
+    <
+    typename
+    _From,
+    typename
+    _To
+    >
+    struct
+    is_convertible:integral_constant
+    < bool, __is_convertible_helper < _From, _To >::__value >
+  {
+  };
+  template < bool, typename _Tp = void >struct enable_if
+  {
+    typedef _Tp type;
+  };
+  template < typename _Tp > struct identity
+  {
+    typedef _Tp type;
+  };
+  template
+    <
+    typename
+    _Tp
+    >
+    typename
+    enable_if
+    <
+    is_lvalue_reference
+    < _Tp >::value, _Tp >::type forward (typename identity < _Tp >::type)
+  {
+    return 0;
+
+  }
+  template < class _T1, class > struct pair
+  {
+    _T1 first;
+    template < class _U1, class = typename enable_if < is_convertible < _U1, _T1 >::value >::type > pair (_U1 __x):
+    first
+      (forward < _U1 > (__x))
+    {
+    }
+  };
+}
+
+namespace __gnu_cxx
+{
+  template < typename > class new_allocator
+  {
+  };
+}
+
+namespace std
+{
+  template < typename _Tp > class allocator:__gnu_cxx::new_allocator < _Tp >
+  {
+  public:
+    template < typename > struct rebind
+    {
+      typedef allocator other;
+    };
+  };
+  template < typename, typename > struct unary_function;
+  template < typename, typename, typename > struct binary_function
+  {
+  };
+  template < typename _Tp > struct less:binary_function < _Tp, _Tp, bool >
+  {
+  };
+  template
+    <
+    typename
+    _Pair
+    > struct _Select1st:unary_function < _Pair, typename _Pair::first_type >
+  {
+  };
+  template < typename > struct _Rb_tree_node;
+  template
+    <
+    typename,
+    typename
+    _Val,
+    typename,
+    typename _Compare, typename _Alloc = allocator < _Val > >class _Rb_tree
+  {
+    typedef
+      typename
+      _Alloc::template
+      rebind < _Rb_tree_node < _Val > >::other _Node_allocator;
+  public:
+    typedef _Alloc allocator_type;
+    template < typename _Key_compare > struct _Rb_tree_impl
+    {
+      _Rb_tree_impl (_Key_compare, _Node_allocator);
+    };
+    _Rb_tree_impl < _Compare > _M_impl;
+  _Rb_tree (_Compare __comp, allocator_type __a):
+    _M_impl (__comp, __a)
+    {
+    }
+  };
+  template < class _E > class initializer_list
+  {
+    typedef size_t size_type;
+    typedef _E *iterator;
+    iterator _M_array;
+    size_type _M_len;
+  };
+  template
+    <
+    typename
+    _Key,
+    typename
+    _Tp,
+    typename
+    _Compare
+    =
+    less
+    <
+    _Key >, typename _Alloc = allocator < pair < _Key, _Tp > > >class multimap
+  {
+    typedef _Key key_type;
+    typedef pair < _Key, _Tp > value_type;
+    typedef _Compare key_compare;
+    typedef _Alloc allocator_type;
+    typedef
+      _Rb_tree
+      <
+      key_type,
+      value_type, _Select1st < value_type >, key_compare > _Rep_type;
+    _Rep_type _M_t;
+  public:
+  multimap (initializer_list < value_type >, _Compare __comp = _Compare (), allocator_type __a = allocator_type ()):
+    _M_t
+      (__comp, __a)
+    {
+    }
+  };
+}
+
+using namespace std;
+void
+test01 ()
+{
+  typedef multimap < int, double >Container;
+  Container (
+	      {
+	      {
+	      1}
+	      }
+  );
+}