Registrations are now open. Join us today!
There is still a lot of work to do on the wiki yet! More information about editing can be found here.
Already have an account?

Microsoft KB Archive/171064

From BetaArchive Wiki
Knowledge Base

Article ID: 171064

Article Last Modified on 7/5/2005


  • Microsoft C++ 32-bit Compiler 1.0

This article was previously published under Q171064


When a member initializer instantiates a template class that takes a const parameter in its constructor, you may receive the following error:

error C2512: no appropriate default constructor available


Declare a global object of the template class specialization that is used in the member initializer. When optimizations are used, this unreferenced global should be optimized away.


Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This problem was corrected in Visual C++ version 6.0 for Windows.


This is a regression from Visual C++ 5.0.

Sample Code

    // Compile options needed: none

    struct _Tree {
      _Tree(const int& _Parg) {}

    template<class _Pr>
    struct set {
      _Tree _Tr;
      set(const _Pr& _Pred = _Pr()) : _Tr(_Pred) {}

    struct Boo
      set<int>& _xSet;

    //set<int> x;  // uncomment for workaround

     : _xSet(*new set<int>)  //C2512 here

Additional query words: visual studio service pack

Keywords: kbbug kbfix kbvc600fix KB171064