default is a reserved keyword in newer C++
use 0 instead of NULL because gcc complains about conversion from NULL to int type (intptr_t)