Knob: older gcc don't like WARN_UNUSED_RETURN on template function definition. Put the definition after the declaration