From 5c542b4a1934271e41e4156d2a78f1ea80baf2a1 Mon Sep 17 00:00:00 2001 From: Gabriel Dos Reis Date: Fri, 18 May 2001 05:47:46 +0000 Subject: [PATCH] std_valarray.h (valarray<>::operator[] const): Return a const reference. * include/bits/std_valarray.h (valarray<>::operator[] const): Return a const reference. * testsuite/26_numerics/valarray_const_bracket.cc: New test. From-SVN: r42245 --- libstdc++-v3/include/bits/std_valarray.h | 5 +- .../26_numerics/valarray_const_bracket.cc | 48 +++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 libstdc++-v3/testsuite/26_numerics/valarray_const_bracket.cc diff --git a/libstdc++-v3/include/bits/std_valarray.h b/libstdc++-v3/include/bits/std_valarray.h index 15a58421d8e..a250dfd122e 100644 --- a/libstdc++-v3/include/bits/std_valarray.h +++ b/libstdc++-v3/include/bits/std_valarray.h @@ -120,7 +120,8 @@ namespace std operator= (const _Expr<_Dom,_Tp>&); // _lib.valarray.access_ element access: - _Tp operator[](size_t) const; + // XXX: LWG to be resolved. + const _Tp& operator[](size_t) const; _Tp& operator[](size_t); // _lib.valarray.sub_ subset operations: _Expr<_SClos<_ValArray,_Tp>, _Tp> operator[](slice) const; @@ -236,7 +237,7 @@ namespace std template - inline _Tp + inline const _Tp& valarray<_Tp>::operator[] (size_t __i) const { return _M_data[__i]; } diff --git a/libstdc++-v3/testsuite/26_numerics/valarray_const_bracket.cc b/libstdc++-v3/testsuite/26_numerics/valarray_const_bracket.cc new file mode 100644 index 00000000000..53819f43ad1 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/valarray_const_bracket.cc @@ -0,0 +1,48 @@ +// 20010518 gdr + +// Copyright (C) 2001 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +#include + +// dg-do compile + +template + void copy(P, std::size_t) { } + +template + void test(const std::valarray& v) + { + copy(&v[0], v.size()); + } + +int main() +{ + std::valarray v(190); + test(v); + return 0; +} -- 2.30.2