use pragma once instead of old style include guards