
Hi, I'm using boost 1.57 after upgrading from 1.50, and the following innocuous looking program does not compile with either GCC (4.9) or Clang (3.5); tested both on Mac & Linux: #include <boost/optional.hpp> // This header triggers the problem #include <boost/variant.hpp> int main() { boost::variant<boost::blank> a, b; swap(a,b); // a.swap(b) does not make a difference } Both GCC and Clang give the same error: /opt/local/include/boost/variant/detail/move.hpp:60:5: error: call to 'swap' is ambiguous swap(lhs, rhs); [....] /opt/local/include/boost/core/swap.hpp:54:8: note: candidate function [with T1 = boost::blank, T2 = boost::blank] void swap(T1& left, T2& right) ^ /opt/local/include/boost/variant/detail/move.hpp:44:13: note: candidate function [with T1 = boost::blank, T2 =boost::blank] inline void swap(T1& lhs, T2& rhs) In this case one could remove the Optional header, but in a larger project this is of course not a solution; a better solution seems to add an overload for swap taking two boost blanks. I feel this is a bug in Boost, can someone confirm and tell me where I should file the bug request? Finally I noticed due to the above error messages that boost::variant will never use variadic templates when you use Clang. For GCC it uses them (in C++11 mode), but for Clang it refuses. Why is this? Thanks, -Berteun