Не вызывается оператор ()

template<class F>
class safecall
{
    F* funcPtr;

public:
    safecall(F* func)
    {
        std::cout << "Contruct" << std::endl;
        funcPtr = func;

        //funcPtr();
    }


    template<class... Args>
    __forceinline decltype(auto) operator()(Args&&... args)
    {
        std::cout << "call" << std::endl;
        return funcPtr(std::forward<Args>(args)...);
    }
};

#define SPOOF_CALL(name) (safecall<decltype(name)>(&name));

int main()
{
    (safecall<decltype(Sleep)>(&Sleep))(2000);
    SPOOF_CALL(Sleep)(2000);
}

Вывод:

Contruct
call
Contruct

Почему первый раз оператор () вызывается, а второй нет? Макрос же сделает аналогичную запись.


Ответы (1 шт):

Автор решения: Qwertiy

Почему первый раз оператор () вызывается, а второй нет?

Потому что в коде нет второго вызова.

Макрос же сделает аналогичную запись.

Нет:

#define SPOOF_CALL(name) (safecall<decltype(name)>(&name));
                                                          ^

Аналогичный пример:

puts("Yes");  // Вызывается
puts;("Yes"); // Не вызывается
→ Ссылка