// This thing can make an array of given type.
template <typename T>
struct Foo {
T data[100];
};
template <typename T>
T Foo::data[100] = {1, 2, 3};
// Don't seem to be able to tell it to make a progmem array.
// warning: ignoring attributes applied to dependent type 'const int' without an associated declaration [-Wattributes]
using MyFoo = Foo<int PROGMEM const>;
CgovLyBUaGlzIHRoaW5nIGNhbiBtYWtlIGFuIGFycmF5IG9mIGdpdmVuIHR5cGUuCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3QgRm9vIHsKCVQgZGF0YVsxMDBdOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ClQgRm9vOjpkYXRhWzEwMF0gPSB7MSwgMiwgM307CgoKLy8gRG9uJ3Qgc2VlbSB0byBiZSBhYmxlIHRvIHRlbGwgaXQgdG8gbWFrZSBhIHByb2dtZW0gYXJyYXkuCi8vIHdhcm5pbmc6IGlnbm9yaW5nIGF0dHJpYnV0ZXMgYXBwbGllZCB0byBkZXBlbmRlbnQgdHlwZSAnY29uc3QgaW50JyB3aXRob3V0IGFuIGFzc29jaWF0ZWQgZGVjbGFyYXRpb24gWy1XYXR0cmlidXRlc10KdXNpbmcgTXlGb28gPSBGb288aW50IFBST0dNRU0gY29uc3Q+OwoK
prog.cpp:10:3: error: ‘template<class T> struct Foo’ used without template parameters
T Foo::data[100] = {1, 2, 3};
^
prog.cpp:10:16: error: template declaration of ‘T data [100]’
T Foo::data[100] = {1, 2, 3};
^
prog.cpp:15:36: error: template argument 1 is invalid
using MyFoo = Foo<int PROGMEM const>;
^