#pragma once #include namespace fc { /** * @brief Used to forward declare value types. * */ template class fwd { public: template fwd( U&& u ); template fwd( U&& u, V&& v ); template fwd( U&& u, V&& v, X&&, Y&& ); fwd(); fwd( const fwd& f ); fwd( fwd&& f ); operator const T&()const; operator T&(); T& operator*(); const T& operator*()const; const T* operator->()const; T* operator->(); bool operator !()const; template T& operator = ( U&& u ); T& operator = ( fwd&& u ); T& operator = ( const fwd& u ); ~fwd(); private: aligned _store; }; } // namespace fc