On Thu, Jan 26, 2017 at 10:08 PM, David Empson <demp...@emptech.co.nz> wrote: > >> On 26/01/2017, at 8:46 PM, Clemens Ladisch <clem...@ladisch.de> wrote: >> >> Ziemowit Laski wrote: >>> Visual C++ >> >> Which one? >> >>> correctly catches this. >> >> Oh? What exactly is illegal about this? >> >>> struct IcuScalar { >>> const char *zName; /* Function name */ >>> int nArg; /* Number of arguments */ >>> int enc; /* Optimal text encoding */ >>> void *pContext; /* sqlite3_user_data() context >>> */ >>> void (*xFunc)(sqlite3_context*,int,sqlite3_value**); >>> } scalars[] = { >>> ... >>> {"icu_load_collation", 2, SQLITE_UTF8, (void*)db, icuLoadCollation}, >>> }; > > The ANSI/ISO C 1990 standard states this in section 6.5.7, under Constraints: > > “All the expressions in an initializer for an object that has static storage > duration or in an initializer list for an object that has aggregate or union > type shall be constant expressions.”
But this object doesn't have static storage duration, does it? `scalars` is just a local variable in a function: https://sourcecodebrowser.com/sqlite3/3.6.21/icu_8c_source.html#l00449 unless I'm looking at the wrong version. Again, it would be nice to see the actual warning from MSVC. FWIW, - Kim _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users