-// template <typename T, OptionalValue<T> (*ISTYPE)( const TreeNode& node ), Property::Type TYPE>
-// OptionalValue<T> IsOfType( const TreeNode& node, const PropertyValueMap& overrideMap, const PropertyValueMap& defaultMap )
-// {
-// OptionalValue<T> ret;
-// if( OptionalString replace = HasFullReplacement( node, overrideMap, defaultMap ) )
-// {
-// Property::Value value = GetFullReplacement( *replace, overrideMap, defaultMap );
-// if( TYPE == value.GetType() )
-// {
-// ret = value.Get<T>();
-// }
-// }
-// else
-// {
-// ret = ISTYPE( node );
-// }
-// return ret;
-
-// }
-
-// OptionalFloat Replacement::IsFloat( const TreeNode & node ) const
-// {
-// return IsOfType<float, ::IsFloat, Property::FLOAT>( node, *mOverrideMap, *mDefaultMap );
-// /* OptionalFloat ret; */
-// /* if( OptionalString replace = HasFullReplacement( node ) ) */
-// /* { */
-// /* Property::Value value = GetFullReplacement( replace ); */
-// /* if( Property::FLOAT == value.GetType() ) */
-// /* { */
-// /* ret = value.Get<float>(); */
-// /* } */
-// /* } */
-// /* else */
-// /* { */
-// /* ret = IsFloat( node ); */
-// /* } */
-// /* return ret; */
-// }
-
-OptionalFloat Replacement::IsFloat( const TreeNode & node ) const