2017-09-07 5 views
0

je tente de compiler les points suivants avec VS2017:VARIADIC enveloppe fonctionnelle ne compile pas avec MSVC2017

template <typename R, typename ...Args> 
struct Logger3<R(Args...)> 
{ 
    std::function<R(Args...)> func; 
    string name; 

    Logger3(std::function<R(Args...)> func, const string& name) 
    : func{func}, name{name} 
    { 
    } 

    R operator() (Args ...args) 
    { 
    cout << "Entering " << name << endl; 
    R result = func(args...); 
    cout << "Exiting " << name << endl; 
    return result; 
    } 
}; 

double add(double a, double b) 
{ 
    cout << a << " + " << b << " = " << (a+b) << endl; 
    return a+b; 
} 

template <typename R, typename... Args> 
auto make_logger3(R (*func)(Args...), const string& name) 
{ 
    return Logger3<R(Args...)>(
    std::function<R(Args...)>(func), 
    name 
); 
}; 

et je deviens error C2988: unrecognizable template declaration/definition sur la première ligne. Qu'est-ce que je fais mal?

+2

Vous devriez avoir template 'struct Logger3,' avant votre spécialisation. – Jarod42

Répondre

2

Vous devriez avoir template <typename> struct Logger3; avant votre spécialisation.