& quot; Синтаксическая ошибка выражения E2188 & quot; при передаче объекта по умолчанию в функцию

class MBool
{
protected:
bool  mData;
public:
MBool() : mData(false)          {}
MBool(bool  Data)               { mData = Data; }
};

void myFunc ( const MBool& rBool )
{
}

bool test()
{
myFunc( MBool() );
myFunc( ( MBool() ) );  // <-- Error E2188 Expression syntax
myFunc( MBool( false ) );
myFunc( ( MBool( false ) ) );
}

Может кто-нибудь, пожалуйста, помогите объяснить выше ошибку? Это происходит с помощью Embarcadero XE7. Тот же код прекрасно компилируется с использованием Visual Studio.
Проблема на XE7, как показано, возникает только во второй строке test Метод, все остальные случаи компилируются нормально.

РЕДАКТИРОВАТЬ
Извините, я вставил неправильный конструктор в моем примере, теперь это исправлено. Когда он заключен в круглые скобки, конструктор с логическим параметром компилируется, но конструктор без параметров не компилируется.

1

Решение

Это ошибка в bcc32.exe. Код работает правильно в bcc64.

Вот MCVE:

void f(int) {}

int main()
{
f((int()));    // E2188 Expression syntax
}

В качестве обходного пути, удалите лишнюю пару скобок.

2

Другие решения

Я думаю, что ошибка, которую вы получаете, на самом деле происходит от:

myFunc( MBool( false ) );

И не из:

myFunc( ( MBool() ) );

В myFunc( MBool( false ) ); вы проходите false конструктору MBool но Mbool только имеет конструктор, принимающий 0 параметров. Если посмотрите на ваш код в этом живой пример вы увидите, что единственными ошибками, которые вы получаете, является проблема с вызовом несуществующего конструктора.

Если вы посмотрите на это Страница справки E2188 ошибка от embarcadero, что бит на ошибку:

Если ошибка произошла в другом операторе, синтаксическая ошибка, вероятно, в окружающем коде.

0