]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR libstdc++/37986 (std::tr1::variate_generator does not conform to TR1.)
authorPaolo Carlini <paolo.carlini@oracle.com>
Tue, 11 Nov 2008 14:31:48 +0000 (14:31 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Tue, 11 Nov 2008 14:31:48 +0000 (14:31 +0000)
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.

From-SVN: r141769

libstdc++-v3/ChangeLog
libstdc++-v3/include/tr1_impl/random
libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/variate_generator/37986.cc [new file with mode: 0644]

index 96357562e264b3964cce1ce1358cb5a836d45e1e..191d27c743c85d7ce0806df8e539381f1b894f75 100644 (file)
@@ -1,3 +1,11 @@
+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.
+
 2008-11-11  Paolo Carlini  <paolo.carlini@oracle.com>
 
        * testsuite/ext/ext_pointer/1_neg.cc: Adjust dg-error line numbers.
index b45368d75321fac2cf309e84fa3eafc1a6f4ecfe..9e30eb32795487e8670211b47ec34aab5ebb1929 100644 (file)
@@ -79,7 +79,10 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
     template<typename _Engine, typename _Distribution>
       struct _Adaptor
       { 
-       typedef typename _Engine::result_type        _Engine_result_type;
+       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:
diff --git a/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/variate_generator/37986.cc b/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/variate_generator/37986.cc
new file mode 100644 (file)
index 0000000..50ca3b9
--- /dev/null
@@ -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);
+}