[Qt-interest] Weird compiler error with QString(QChar(value))

Nikos Chantziaras realnc at arcor.de
Thu May 6 18:30:12 CEST 2010


On 05/06/2010 07:26 PM, Duane Hebert wrote:
>
> "Stephen Chu" <stephen at ju-ju.com> wrote in message
> news:stephen-56F742.11370706052010 at nntp.trolltech.com...
>> In article <hrul12$9l1$1 at eple.troll.no>,
>> Nikos Chantziaras <realnc at arcor.de> wrote:
>>
>>> On 05/06/2010 05:35 PM, Stephen Chu wrote:
>>> > In article<201005052127.23761.thiago at kde.org>,
>>> > Thiago Macieira<thiago at kde.org> wrote:
>>> >
>>> > Thanks for the explanation. I ran into the same problem just last
>>> night.
>>> > Pulling my hairs out on this one.
>>> >
>>> > One question though. If that line of code actually declares a
>>> function,
>>> > what does 'unicodeValue' in the declaration do? I thought a function
>>> > declaration is something like:
>>> >
>>> > QString s(QChar unicodeValue);
>>>
>>> It's the same since you can put parentheses pretty much everywhere.
>>> As I posted previously for example, you can define main() like this:
>>>
>>> int main( int(argc), char**(argv) )
>>>
>>> and it's accepted by the compiler. That means that these two function
>>> declarations:
>>>
>>> QString s(QChar unicodeValue);
>>> QString s(QChar(unicodeValue));
>>>
>>> are equivalent. IMHO that's wrong, but then again, I don't know what
>>> would break in the C++ standard if it would treat it as wrong. But
>>> given that C++ allows you to use simple types (int, char, etc) as
>>> classes:
>>>
>>> int i = int(50); //'int' is not a class, but you can use it as one
>>>
>>> it should bark at the above definition of main().
>>
>> Got it. Thanks. I was pulling my hairs when something like:
>>
>> QRectF r(QRectF(aPixmap.rect()));
>>
>> works but this doesn't:
>>
>> QRectF r(QRectF(aRect));
>>
>> Learn another trick (or trap?). The compiler should at least put a
>> more informative warning on that line.
>
> VS8 says : warning C4930: 'QRectF r(QRectF)': prototyped function not
> called (was a variable definition intended?)

GCC warns too. But in this case, an error is generated first (since 
we're trying to use the declared function as an object), it doesn't get 
to the point where it would issue a warning; that would assume the code 
actually compiles.



More information about the Qt-interest-old mailing list