On 1/22/2015 3:44 PM, Marc Glisse wrote: > On Thu, 22 Jan 2015, Joel Sherrill wrote: > >> I think this is a glibc issue but since this method is defined in the C++ >> standards, I thought there were plenty of language lawyers here. :) > s/glibc/libstdc++/ and they have their own ML. Thank you. >> <strstream> > That's deprecated, isn't it? Yes. There is also a warning about that coming from the test code. I don't know how long it has been deprecated since even with -std=c++03, the warning is present. >> class strstreambuf : public basic_streambuf<char, char_traits<char> > >> ISSUE ====> int pcount() const; <===== ISSUE >> >> My reading of the C++03 and draft C++14 says that the int pcount() method >> in this class is not const. glibc has it const in the glibc shipped with >> Fedora 20 >> and CentOS 6. >> >> This is a simple test case: >> >> #include <strstream> >> >> int main() { >> int (std::strstreambuf::*dummy)() = &std::strstreambuf::pcount; >> /*-- pcount is conformant --*/ >> return 0; >> } >> >> What's the consensus? > The exact signature of member functions is not mandated by the standard, > implementations are allowed to make the function const if that works (or > provide both a const and a non-const version). Your code is not guaranteed > to work. Lambdas usually provide a fine workaround. > This code is actually from the Open Group FACE Conformance Test Suite. It uses code like this to check the presence of methods from the C Standard Library, POSIX APIs, and the C++ Standard Library. It would be really helpful if you could cite the place in the C++ standard so I can provide that as feedback to the authors of the test suite.
On a positive note, the test suite isn't flagging much using this technique. This may be the only method. But I would like to provide the correct feedback to them so no one else deals with this. Thanks. -- Joel Sherrill, Ph.D. Director of Research & Development joel.sherr...@oarcorp.com On-Line Applications Research Ask me about RTEMS: a free RTOS Huntsville AL 35805 Support Available (256) 722-9985