Flash String Helper object as variable So I have a Bunch of commonly used char arrays to build commands in my library.
So to preserve memory, I have them put into flash, via PROGMEM ext,

typedef const char PROGMEM ProgChar;
ProgChar AT[] = "AT";
ProgChar AT_RST[] = "RST";


Then in my program I have it all go out to A port via:

*hws &lt;&lt; AT &lt;&lt; PLUS &lt;&lt; CWMODE &lt;&lt; EQUAL; //hws can be any Print type,


This is handled by overloading the &lt;&lt; operator;

static Print &amp;operator &lt;&lt;(Print &amp;obj, ProgChar* arg) { 
  char pbuffbuffer[12]; //create a buffer,
  obj.print(loadProgmemVal(arg,pbuffbuffer)); //Load it, and then pass to obj print method.
  return obj; 
}


But this also overloads the &lt;&lt; operator for all const char* Which makes me have to do a workaround:

hws-&gt;print(1); //HACK


At first, I thought I would overload the operator to handle both a char* and a Prog Char Object, But unfortunately, they are both treated as the same thing at run-time which makes that idea useless.

So after snooping I find the __FlashStringHelper type and macro. Which would allow me to have a sepperate type for these variables, and allow me to overload.

But the problem is, I cant find a good way to Create these:

const __FlashStringHelper MYVAR = F("Some text to be progchared");


Does not compile =/

Now I could probably make some helper method to load them all in, but that is just patching a hack with another hack... Is there any Clean way to do this? So I can use &lt;&lt; for all types,

*hws &lt;&lt; AT &lt;&lt; PLUS &lt;&lt; CWMODE &lt;&lt; EQUAL &lt;&lt; 1 &lt;&lt; "\r\n"; //1 and Return break...
Is this legal?

typedef const char ProgChar;
ProgChar AT[] = "AT";


I would think that the PROGMEM can't be in the typedef, i.e.:

typedef const char ProgChar;
ProgChar AT[] PROGMEM = "AT";