This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Strange warnings from GCC++ 4.6.2 in Atmel Studio 6


On 17 December 2012 14:25, George H. Barbehenn wrote:
> GCC:
>     I get the warning:
>
> Warning    1    deprecated conversion from string constant to 'char*'
> [-Wwrite-strings]
>
>     It is thrown on the following line:
>
> myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1);
>
>     There are two overloads of the print method:
>
>         void print(char *st, int x, int y, int deg=0);
>         void print(String st, int x, int y, int deg=0);
>
>     (folded code):
> void UTFT::print(char *st, int x, int y, int deg)
> {
> }
>
> void UTFT::print(String st, int x, int y, int deg)
> {
> }
>
> I'm not sure why the compiler is confusing the overloads, is "String st"
> somehow equivalent to "char *st"?

What makes you think it's confusing them?  The warning doesn't say
anything like that.

"* Universal Color TFT Display Library *" is a string literal with
type const char*. In C++03 a string literal can be converted to a
char*, but that conversion is deprecated (and not allowed in C++11).
During overload resolution the compiler see that it can call the
print(char*,...) overload via the standard conversion from a string
literal to char*. Presumably calling the print(String, ...) overload
is either not possible or would require a user-defined conversion. A
standard conversion is always preferred to a user-defined conversion,
so the print(char*,...) overload is called, and the compiler warns you
that it used the deprecated conversion from string literal to char*.

If you want to force the other overload, either don't call it with a literal:

const char* s = "* Universal Color TFT Display Library *";
myGLCD.print(s, CENTER, 1);

or perform an explicit conversion:

myGLCD.print(String("* Universal Color TFT Display Library *"), CENTER, 1);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]