do not use C++14 return type deduction for better compatibility