Not really a solution for the macros, but a simple workaround would be to provide a helper variadic function template, which can get 0 parameters and do the condition checking there:
#define ASSERT(...) \
MyLogHelper(__LINE__, __VA_ARGS__)
template<typename... Args>
void MyLogFunction(int line, const Args&... ) {/*code*/}
template<typename... Args>
void MyLogHelper(int line, bool condition, const Args&... args)
{
if (!condition) MyLogFunction(line,args...);
}