This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[v3] Fix libstdc++/37986


Hi,

tested x86_64-linux, committed to mainline.

Paolo.

///////////////////
2008-11-11  Paolo Carlini  <paolo.carlini@oracle.com>

	PR libstdc++/37986
	* include/tr1_impl/random (struct _Adaptor): Use remove_pointer
	and remove_reference on _Engine.
	* testsuite/tr1/5_numerical_facilities/random/variate_generator/
	37986.cc: New.
Index: include/tr1_impl/random
===================================================================
*** include/tr1_impl/random	(revision 141739)
--- include/tr1_impl/random	(working copy)
*************** _GLIBCXX_BEGIN_NAMESPACE_TR1
*** 79,85 ****
      template<typename _Engine, typename _Distribution>
        struct _Adaptor
        { 
! 	typedef typename _Engine::result_type        _Engine_result_type;
  	typedef typename _Distribution::input_type   result_type;
  
        public:
--- 79,88 ----
      template<typename _Engine, typename _Distribution>
        struct _Adaptor
        { 
! 	typedef typename remove_reference<
! 	  typename remove_pointer<_Engine>::type>::type _BEngine;
! 
! 	typedef typename _BEngine::result_type       _Engine_result_type;
  	typedef typename _Distribution::input_type   result_type;
  
        public:
Index: testsuite/tr1/5_numerical_facilities/random/variate_generator/37986.cc
===================================================================
*** testsuite/tr1/5_numerical_facilities/random/variate_generator/37986.cc	(revision 0)
--- testsuite/tr1/5_numerical_facilities/random/variate_generator/37986.cc	(revision 0)
***************
*** 0 ****
--- 1,45 ----
+ // { dg-do compile }
+ //
+ // Copyright (C) 2008 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+ // software; you can redistribute it and/or modify it under the
+ // terms of the GNU General Public License as published by the
+ // Free Software Foundation; either version 2, or (at your option)
+ // any later version.
+ //
+ // This library is distributed in the hope that it will be useful,
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ // GNU General Public License for more details.
+ //
+ // You should have received a copy of the GNU General Public License along
+ // with this library; see the file COPYING.  If not, write to the Free
+ // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ // USA.
+ 
+ // 5.1.3 class template variate_generator
+ 
+ #include <tr1/random>
+ 
+ // libtsdc++/37986
+ void test01()
+ {
+   std::tr1::mt19937 mt;
+   std::tr1::uniform_real<double> dist;
+ 
+   std::tr1::variate_generator<
+     std::tr1::mt19937,
+     std::tr1::uniform_real<double>
+     > g1(mt, dist);
+ 
+   std::tr1::variate_generator<
+     std::tr1::mt19937&,
+     std::tr1::uniform_real<double>
+     > g2(mt, dist);
+ 
+   std::tr1::variate_generator<
+     std::tr1::mt19937*,
+     std::tr1::uniform_real<double>
+     > g3(&mt, dist);
+ }

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]