g++ не может найти перегруженную функцию после typecast

У меня перегружена функция

void FuncGetSomething(string, double&)
void FuncGetSomething(string, int&)
void FuncGetSomething(string, bool&)

.... Это должно работать так

double myDbl = 0;
FuncGetSomething("Somename", myDbl) 
//to get the new value for myDbl in side the function, and the new value is preset earlier in the code

Но по какой-то причине я видел, как кто-то написал это

double myDlb = 0;
FuncGetSomething("Somename", (double)myDbl)

и это работает в Visual Studio 2008.

Однако, когда я пытаюсь собрать то же самое в Linux (g++ 4.7.2), он жалуется

error: no matching function for call to  GetSomething(const char [8], double) can be found

Кто-нибудь может дать мне несколько идей о том, почему он работает в VS08 и почему он не в Linux? Есть ли способ заставить его работать в Linux?

1 ответ

Актерский состав (double) означает, что это создает временный объект типа double, Когда вы вызываете функцию, вы пытаетесь привязать к ней неконстантную ссылку, что недопустимо. Это может помочь:

void f( double& ) {};

double d = 1.2;
f( d ); // allowed (1)
f( 1.2 ); // not allowed (2)
f( (double)d ); // not allowed, basically the same as (2)
Другие вопросы по тегам