icc 15.0.0 fails to compile the following
#include <utility> struct S { enum E {A,B}; // convert run-time variable e to a compile-time variable template<template<E> class F, typename... Args> static auto Switch(E e, Args&&... args) -> decltype(F<A>::act(std::forward<Args>(args)...)) { switch(e) { case A: return F<A>::act(std::forward<Args>(args)...); case B: return F<B>::act(std::forward<Args>(args)...); } } }; template<S::E> struct foo { static double act(double); }; double work(S::E e, double x) { return S::Switch<foo>(e,x); }
but fails with the error message "no instance of the function template "S::Switch" matches the argument list". This is obviously wrong.