#include struct CallerConst { void Call() const { } }; struct CallerNonConst { void Call() { } }; struct FunctorNonConst { void operator()() { } }; struct FunctorConst { void operator()() const { } }; void Function() { } int main() { auto val1 = boost::is_function::value; auto val2 = boost::is_function::value; auto val3 = boost::is_function::value; auto val4 = boost::is_function::value; auto val5 = boost::is_function::value; auto val6 = boost::is_function::value; // VC++ compile error if any of val1, val2, val5 is present return 0; }