From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4696 invoked by alias); 8 Sep 2002 18:46:01 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 4676 invoked by uid 71); 8 Sep 2002 18:46:00 -0000 Resent-Date: 8 Sep 2002 18:46:00 -0000 Resent-Message-ID: <20020908184600.4675.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, Peter Schmid Received: (qmail 3314 invoked from network); 8 Sep 2002 18:39:42 -0000 Received: from unknown (HELO snake.iap.physik.tu-darmstadt.de) (130.83.4.87) by sources.redhat.com with SMTP; 8 Sep 2002 18:39:42 -0000 Received: (from schmid@localhost) by snake.iap.physik.tu-darmstadt.de (8.9.3/8.9.3/SuSE Linux 8.9.3-0.1) id UAA10207; Sun, 8 Sep 2002 20:39:41 +0200 Message-Id: <200209081839.UAA10207@snake.iap.physik.tu-darmstadt.de> Date: Sun, 08 Sep 2002 11:46:00 -0000 From: Peter Schmid To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: 3.113 Subject: c++/7858: g++ rejects legal code (regression from gcc 3.*) X-SW-Source: 2002-09/txt/msg00119.txt.bz2 List-Id: >Number: 7858 >Category: c++ >Synopsis: g++ rejects legal code (regression from gcc 3.*) >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: rejects-legal >Submitter-Id: net >Arrival-Date: Sun Sep 08 11:46:00 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Peter Schmid >Release: 3.3 20020905 (experimental) >Organization: TU Darmstadt >Environment: System: Linux kiste 2.4.18 #8 Sat Mar 9 15:33:15 CET 2002 i686 unknown Architecture: i686 GNU ld version 2.13.90.0.4 20020814 host: i686-pc-linux-gnu build: i686-pc-linux-gnu target: i686-pc-linux-gnu configured with: ../gcc/configure --enable-shared --disable-nls --enable-threads=posix --enable-languages=c,c++,f77,objc --enable-__cxa_atexit >Description: The g++ compiler built from current mainline cvs sources rejects the following code tc1.C breaking boost and STLport. Previous g++ compilers, including gcc 3.3 bootstrapped one week ago, compile this code normally. >How-To-Repeat: source code tc1.C namespace std { template struct unary_function { typedef _Arg argument_type; typedef _Result result_type; }; template struct binary_function { typedef _Arg1 first_argument_type; typedef _Arg2 second_argument_type; typedef _Result result_type; }; template struct plus : public binary_function<_Tp,_Tp,_Tp> { _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x + __y; } }; template class binder1st : public unary_function { protected: _Operation op; typename _Operation::first_argument_type value; public: binder1st(const _Operation& __x, const typename _Operation::first_argument_type& __y) : op(__x), value(__y) {} typename _Operation::result_type operator()(const typename _Operation::second_argument_type& __x) const { return op(value, __x); } typename _Operation::result_type operator()(typename _Operation::second_argument_type& __x) const { return op(value, __x); } }; template inline binder1st<_Operation> bind1st(const _Operation& __fn, const _Tp& __x) { typedef typename _Operation::first_argument_type _Arg1_type; return binder1st<_Operation>(__fn, _Arg1_type(__x)); } } // namespace std template _OutputIter transform(_InputIter __first, _InputIter __last, _OutputIter __result, _UnaryOperation __unary_op) { for ( ; __first != __last; ++__first, ++__result) *__result = __unary_op(*__first); return __result; } int main() { char a[10]; char b[10]; transform(a, a+10, b, std::bind1st(std::plus(), 1)); } compiling tc1.C g++ -v tc1.C -W -Wall Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.3/specs Configured with: ../gcc/configure --enable-shared --disable-nls --enable-threads=posix --enable-languages=c,c++,f77,objc --enable-__cxa_atexit Thread model: posix gcc version 3.3 20020905 (experimental) /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.3/cc1plus -quiet -v -D__GNUC__=3 -D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=0 -D_GNU_SOURCE tc1.C -D__GNUG__=3 -quiet -dumpbase tc1.C -auxbase tc1 -W -Wall -version -o /tmp/cc9l1up9.s GNU C++ version 3.3 20020905 (experimental) (i686-pc-linux-gnu) compiled by GNU C version 3.3 20020905 (experimental). ignoring nonexistent directory "NONE/include" ignoring nonexistent directory "/usr/local/i686-pc-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: /usr/local/include/c++/3.3 /usr/local/include/c++/3.3/i686-pc-linux-gnu /usr/local/include/c++/3.3/backward /usr/local/include /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.3/include /usr/include End of search list. tc1.C: In function `std::binder1st<_Operation> std::bind1st(const _Operation&, const _Tp&) [with _Operation = std::plus, _Tp = int]': tc1.C:69: instantiated from here tc1.C:47: error: non-lvalue in unary `&' >Fix: >Release-Note: >Audit-Trail: >Unformatted: