I have a ticket < https://trac.macports.org/ticket/41004 > with an issue between Boost and Apple's new libc++; or, something like that. A simple program which shows this issue is: {{{ #include <boost/lexical_cast.hpp>
template <class T> struct to_hex{ T value; operator T() const {return value;} friend std::istream& operator>>(std::istream& lhs, to_hex& rhs){ lhs >> std::hex >> rhs.value; return lhs; } }; int main() { std::string ss("0x192"); boost::uint16_t foo = boost::lexical_cast<to_hex<boost::uint16_t> >(ss); return 0; }; }}} The above compiles (and executes) with: {{{ clang++ -c -stdlib=libstdc++ -Wall -I/opt/local/include -o test_boost_lexical_cast.o test_boost_lexical_cast.cpp }}} but not if "-stdlib=libc++". The error is "/opt/local/include/boost/type_traits/detail/has_binary_operator.hpp:157:68: error: use of overloaded operator '>>' is ambiguous (with operand types 'std::__1::basic_istream<wchar_t>' and 'to_hex<unsigned short>')". While I can change the whole boost::lexical_cast to instead be: {{{ std::stringstream interpreter(ss); to_hex<boost::uint16_t> hh; interpreter >> hh; boost::uint16_t foo = hh; }}} that is sloppy; I like the neatness of the lexical_cast. That said, I'm open to other's suggestions of alternative implementations -- converting a hex-style numeric string ("0x[0-9a-zA-Z]*") into a uint16. There is a boost ticket < https://svn.boost.org/trac/boost/ticket/6219 > which is similar but not this; I have not found a reason or solution in all of my searching, hence the query to this erudite list! I value your thoughts ... - MLD _______________________________________________ macports-dev mailing list macports-dev@lists.macosforge.org https://lists.macosforge.org/mailman/listinfo/macports-dev