Over on the Microsoft forum one of the contributers suggested adding an extra line which - by some strange magic - seems to fix the compile:-

Code:
#include <list>

using LT = std::list<int>;

using func_void_t = void(LT::*)();
using func_ref_t = LT::reference(LT::*)();
using func_iter_t = LT::iterator(LT::*)();

using unused = decltype(std::declval<LT>().unique()); // <--- New line

int main (int argc, char *argv[])
{
// Non-overloaded members
   [...]

// Members with overloads
   [...]
  func_void_t f5 = &LT::unique; // Now succeeds !!!

  return 0;
}
But even over there they reckon it's a compiler bug and needs to get reported to the VC development team.