Re: C++0x syntax question
Kelly Beard <[email protected]>
| Newsgroups | gmane.comp.lang.as400.c |
|---|---|
| Message-ID | <CAOvM2Stv=R5GZC8_pX2=vgj8ben-H87h1+UqSRX_QXRq2ubjmQ@mail.gmail.com> |
Take away the *EXTENDED0X option and it compiles just fine. On Tue, Sep 12, 2017 at 10:21 AM, Mark S Waterbury < [email protected]> wrote: > Kelly, > > Did this code ever compile on IBM i under previous versions of the IBM > ILE C++ compiler? > > IBM does not strictly follow the ANSI standards for either C or C++ ... > > You could also install the open-source GCC compiler and it would probably > compile this code for you ... of course, the resulting object code would > run under PASE ... > > Mark > > > > On 9/12/2017 10:57 AM, Kelly Beard wrote: > >> I am attempting to compile the following code under the newer compiler >> under V7R3 and the LANGLVL *EXTENDED0X option enabled. I am using the >> 5799PTL 'icc' compiler front-end to do this. The command default for >> CRTCPPMOD has been altered to always have *EXTENDED0X on by default. I am >> getting this: >> >> "testme.cpp", line 14.18: CZP0130 (30) "start" is not declared. >> >> The offending line looks like: >> >> T::size_type start = 0; >> >> So, is there a change to the C++11 syntax here? Thanks in advance, as >> always. Here is the test program. >> >> #include <iostream> >> #include <string> >> #include <sstream> >> #include <iomanip> >> #include <vector> >> #include <unistd.h> >> >> using namespace std; >> >> >> template<typename T> vector<T> split(const T & str, const T & delimiters) >> { >> vector<T> v; >> T::size_type start = 0; >> size_t pos = str.find_first_of(delimiters, start); >> while (pos != T::npos) { >> if (pos != start) { // ignore empty tokens >> v.push_back(str.substr(start, pos - start)); >> } >> start = pos + 1; >> pos = str.find_first_of(delimiters, start); >> } >> if (start < str.length()) { // ignore trailing delimiter >> v.push_back(str.substr(start, pos - start)); >> } >> return v; >> } >> >> >> int main(int argc, char* argv[]) >> { >> string str = "this,is,a,test, of whatever, like, ok."; >> vector<string> v = split<string>(str, ", "); >> for (int i = 0; i < v.size(); ++i) { >> cout << v[i] << endl; >> } >> } >> >> >> > -- > This is the Bare Metal Programming IBM i (AS/400 and iSeries) (C400-L) > mailing list > To post a message email: C400-L-Zwy7GipZuJhWk0Htik3J/[email protected] > To subscribe, unsubscribe, or change list options, > visit: https://lists.midrange.com/mailman/listinfo/c400-l > or email: C400-L-request-Zwy7GipZuJhWk0Htik3J/[email protected] > Before posting, please take a moment to review the archives > at https://archive.midrange.com/c400-l. > > -- Kelly Beard -- This is the Bare Metal Programming IBM i (AS/400 and iSeries) (C400-L) mailing list To post a message email: C400-L-Zwy7GipZuJhWk0Htik3J/[email protected] To subscribe, unsubscribe, or change list options, visit: https://lists.midrange.com/mailman/listinfo/c400-l or email: C400-L-request-Zwy7GipZuJhWk0Htik3J/[email protected] Before posting, please take a moment to review the archives at https://archive.midrange.com/c400-l.