#pragma once #include "PointerWrapper.hpp" #include namespace shader::ir { class NameStorage; template struct PrintableWrapper : PointerWrapper { using PointerWrapper::PointerWrapper; using PointerWrapper::operator=; void print(std::ostream &os, NameStorage &ns) const { if constexpr (requires { this->impl->print(os, ns); }) { this->impl->print(os, ns); } else { this->impl->print(os); } } void print(std::ostream &os) const requires requires { this->impl->print(os); } { this->impl->print(os); } }; } // namespace shader::ir