Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Beginner
24 Views

failure to compile variadic template function

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.

0 Kudos
3 Replies
Highlighted
Employee
24 Views

Thanks for the test case. I can reproduce this error message with 15.0.2. This GNU compiler has no problem compiling this code. I'll update this thread with an internal tracking ID.

0 Kudos
Highlighted
Employee
24 Views

The internal tracking ID for this issue is DPD200366869.

0 Kudos
Highlighted
Employee
24 Views

I verified that this issue is fixed in the 16.0 Update 1 release, which will be available for download soon.

0 Kudos