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

#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.