PRB: C2279: Braces Not Valid in Function Default Argument List

ID: Q93401


The information in this article applies to:
  • The Microsoft C/C++ Compiler (CL.EXE)
    • Microsoft C/C++ for MS-DOS
    • Microsoft Visual C++ for Windows, 16-bit edition, versions 1.0, 1.5, 1.51, 1.52
    • Microsoft Visual C++, 32-bit Editions, versions 1.0, 2.0, 2.1, 4.0, 4.1, 4.2, 5.0, 6.0


SYMPTOMS

When Microsoft C/C++ compiles an application that specifies a structure in the default arguments for a function, the compilation fails with the following error messages:

error C2059: syntax error : '{'
error C2279: cannot use braces to initialize default arguments


CAUSE

According to the C++ grammar, the default value for an argument must be an expression. An initializer list, such as that used to initialize a structure, is not an expression.


RESOLUTION

Define a constructor to perform the required initialization.


MORE INFORMATION

The first code example demonstrates the errors listed above. The second code example demonstrates the correct method to initialize the structure.

Code Sample 1


/*
 * Compile options needed: /c
 */ 

struct ag_type
{
   int a;
   float b;
};

void func(ag_type arg = {5, 7.0}); 

Code Sample 2


/*
 * Compile options needed: /c
 */ 

struct ag_type
{
   int a;
   float b;
   ag_type(int aa, float bb) : a(aa), b(bb) {}
};

void func(ag_type arg = ag_type(5, 7.0)); 

Additional query words: 8.00 8.00c 9.00 9.10

Keywords : kbCompiler kbCPPonly kbVC100 kbVC150 kbVC151 kbVC152 kbVC200 kbVC210 kbVC400 kbVC410 kbVC420 kbVC500 kbVC600
Version :
Platform : MS-DOS NT WINDOWS
Issue type : kbprb


Last Reviewed: July 15, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.