From 285743c92b583002623fe59d2886c6396b626129 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Tue, 11 Nov 2008 14:31:48 +0000 Subject: [PATCH] re PR libstdc++/37986 (std::tr1::variate_generator does not conform to TR1.) 2008-11-11 Paolo Carlini 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 | 8 ++++ libstdc++-v3/include/tr1_impl/random | 5 ++- .../random/variate_generator/37986.cc | 45 +++++++++++++++++++ 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/variate_generator/37986.cc diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 96357562e264..191d27c743c8 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2008-11-11 Paolo Carlini + + 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 * testsuite/ext/ext_pointer/1_neg.cc: Adjust dg-error line numbers. diff --git a/libstdc++-v3/include/tr1_impl/random b/libstdc++-v3/include/tr1_impl/random index b45368d75321..9e30eb327954 100644 --- a/libstdc++-v3/include/tr1_impl/random +++ b/libstdc++-v3/include/tr1_impl/random @@ -79,7 +79,10 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1 template 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 index 000000000000..50ca3b96ea32 --- /dev/null +++ b/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/variate_generator/37986.cc @@ -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 + +// libtsdc++/37986 +void test01() +{ + std::tr1::mt19937 mt; + std::tr1::uniform_real dist; + + std::tr1::variate_generator< + std::tr1::mt19937, + std::tr1::uniform_real + > g1(mt, dist); + + std::tr1::variate_generator< + std::tr1::mt19937&, + std::tr1::uniform_real + > g2(mt, dist); + + std::tr1::variate_generator< + std::tr1::mt19937*, + std::tr1::uniform_real + > g3(&mt, dist); +} -- 2.47.2