From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23688 invoked by alias); 18 Sep 2002 07:16: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 23650 invoked by uid 71); 18 Sep 2002 07:16:00 -0000 Resent-Date: 18 Sep 2002 07:16:00 -0000 Resent-Message-ID: <20020918071600.23649.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, nmusatti@comm2000.it Received: (qmail 22650 invoked by uid 61); 18 Sep 2002 07:07:24 -0000 Message-Id: <20020918070724.22649.qmail@sources.redhat.com> Date: Wed, 18 Sep 2002 00:16:00 -0000 From: nmusatti@comm2000.it Reply-To: nmusatti@comm2000.it To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/7965: Mistaken attempt to call a class template default constructor X-SW-Source: 2002-09/txt/msg00540.txt.bz2 List-Id: >Number: 7965 >Category: c++ >Synopsis: Mistaken attempt to call a class template default constructor >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: rejects-legal >Submitter-Id: net >Arrival-Date: Wed Sep 18 00:16:00 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Nicola Musatti >Release: gcc version 3.2 (mingw special 20020817-1) >Organization: >Environment: Windows 2000 >Description: Compilation of the enclosed source results in the following error messages: ConcreteClass.cpp: In function `int main()': ConcreteClass.cpp:34: no matching function for call to `DirectAttribute::DirectAttribute()' ConcreteClass.cpp:4: candidates are: DirectAttribute::DirectAttribute(const DirectAttribute&) ConcreteClass.cpp:8: DirectAttribute::DirectAttribute(T C::*) [with C = A, T = double] ConcreteClass.cpp:34: warning: unused variable `ConcreteClass metaA' Apparently an attempt is made to generate a (spurious) call to DirectAttribute's default constructor. The problem disappears if DirectAttribute's private member is removed (but not the constructor's argument). >How-To-Repeat: Compile the following code: template class DirectAttribute { public: typedef T C::* MemberType; DirectAttribute(MemberType m) : member(m) {} private: MemberType member; }; struct A { double f; }; template class ConcreteClass { }; template <> class ConcreteClass { public: ConcreteClass() : f1(&A::f) {} private: DirectAttribute f1; }; int main() { ConcreteClass metaA; } >Fix: >Release-Note: >Audit-Trail: >Unformatted: