require '_h2ph_pre.ph';

no warnings 'redefine';

unless(defined(&_CPP_VALARRAY_META_H)) {
    eval 'sub _CPP_VALARRAY_META_H () {1;}' unless defined(&_CPP_VALARRAY_META_H);
    eval 'sub _DEFINE_EXPR_UNARY_OPERATOR {
        my($_Op, $_Name) = @_;
	    eval q( &template< &class  &_Dom,  &typename  &_Tp>  &inline  &_Expr< &_UnClos<$_Name, &std:: &_Expr, &_Dom>, &_Tp>  &_Expr< &_Dom, &_Tp>:: &operator $_Op()  &const {  &typedef  &_UnClos<$_Name, &std:: &_Expr, &_Dom>  &_Closure;  &return  &_Expr< &_Closure, &_Tp>( &_Closure( ($this->{_M_closure}))); });
    }' unless defined(&_DEFINE_EXPR_UNARY_OPERATOR);
    undef(&_DEFINE_EXPR_UNARY_OPERATOR) if defined(&_DEFINE_EXPR_UNARY_OPERATOR);
    eval 'sub _DEFINE_EXPR_BINARY_OPERATOR {
        my($_Op, $_Name) = @_;
	    eval q( &template< &class  &_Dom1,  &class  &_Dom2>  &inline  &_Expr< &_BinClos<$_Name, &_Expr, &_Expr, &_Dom1, &_Dom2>,  &typename  &__fun<$_Name,  &typename  &_Dom1:: &value_type>:: &result_type>  &operator $_Op( &const  &_Expr< &_Dom1, &typename  &_Dom1:: &value_type>&  &__v,  &const  &_Expr< &_Dom2, &typename  &_Dom2:: &value_type>&  &__w) {  &typedef  &typename  &_Dom1:: &value_type  &_Arg;  &typedef  &typename  &__fun<$_Name,  &_Arg>:: &result_type  &_Value;  &typedef  &_BinClos<$_Name, &_Expr, &_Expr, &_Dom1, &_Dom2>  &_Closure;  &return  &_Expr< &_Closure, &_Value>( &_Closure( &__v(),  &__w())); }  &template< &class  &_Dom>  &inline  &_Expr< &_BinClos<$_Name, &_Expr, &_Constant, &_Dom, &typename  &_Dom:: &value_type>,  &typename  &__fun<$_Name,  &typename  &_Dom:: &value_type>:: &result_type> &operator $_Op( &const  &_Expr< &_Dom, &typename  &_Dom:: &value_type>&  &__v,  &const  &typename  &_Dom:: &value_type&  &__t) {  &typedef  &typename  &_Dom:: &value_type  &_Arg;  &typedef  &typename  &__fun<$_Name,  &_Arg>:: &result_type  &_Value;  &typedef  &_BinClos<$_Name, &_Expr, &_Constant, &_Dom, &_Arg>  &_Closure;  &return  &_Expr< &_Closure, &_Value>( &_Closure( &__v(),  &__t)); }  &template< &class  &_Dom>  &inline  &_Expr< &_BinClos<$_Name, &_Constant, &_Expr, &typename  &_Dom:: &value_type, &_Dom>,  &typename  &__fun<$_Name,  &typename  &_Dom:: &value_type>:: &result_type> &operator $_Op( &const  &typename  &_Dom:: &value_type&  &__t,  &const  &_Expr< &_Dom, &typename  &_Dom:: &value_type>&  &__v) {  &typedef  &typename  &_Dom:: &value_type  &_Arg;  &typedef  &typename  &__fun<$_Name,  &_Arg>:: &result_type  &_Value;  &typedef  &_BinClos<$_Name, &_Constant, &_Expr, &_Arg, &_Dom>  &_Closure;  &return  &_Expr< &_Closure, &_Value>( &_Closure( &__t,  &__v())); }  &template< &class  &_Dom>  &inline  &_Expr< &_BinClos<$_Name, &_Expr, &_ValArray, &_Dom, &typename  &_Dom:: &value_type>,  &typename  &__fun<$_Name,  &typename  &_Dom:: &value_type>:: &result_type> &operator $_Op( &const  &_Expr< &_Dom, &typename  &_Dom:: &value_type>&  &__e,  &const  &valarray< &typename  &_Dom:: &value_type>&  &__v) {  &typedef  &typename  &_Dom:: &value_type  &_Arg;  &typedef  &typename  &__fun<$_Name,  &_Arg>:: &result_type  &_Value;  &typedef  &_BinClos<$_Name, &_Expr, &_ValArray, &_Dom, &_Arg>  &_Closure;  &return  &_Expr< &_Closure, &_Value>( &_Closure( &__e(),  &__v)); }  &template< &class  &_Dom>  &inline  &_Expr< &_BinClos<$_Name, &_ValArray, &_Expr, &typename  &_Dom:: &value_type, &_Dom>,  &typename  &__fun<$_Name,  &typename  &_Dom:: &value_type>:: &result_type> &operator $_Op( &const  &valarray< &typename  &_Dom:: &value_type>&  &__v,  &const  &_Expr< &_Dom, &typename  &_Dom:: &value_type>&  &__e) {  &typedef  &typename  &_Dom:: &value_type  &_Tp;  &typedef  &typename  &__fun<$_Name,  &_Tp>:: &result_type  &_Value;  &typedef  &_BinClos<$_Name, &_ValArray, &_Expr, &_Tp, &_Dom>  &_Closure;  &return  &_Expr< &_Closure, &_Value> ( &_Closure ( &__v,  &__e ())); });
    }' unless defined(&_DEFINE_EXPR_BINARY_OPERATOR);
    undef(&_DEFINE_EXPR_BINARY_OPERATOR) if defined(&_DEFINE_EXPR_BINARY_OPERATOR);
    eval 'sub _DEFINE_EXPR_UNARY_FUNCTION {
        my($_Name) = @_;
	    eval q( &template< &class  &_Dom>  &inline  &_Expr< &_UnClos< &__$_Name, &_Expr, &_Dom>, &typename  &_Dom:: &value_type> $_Name( &const  &_Expr< &_Dom, &typename  &_Dom:: &value_type>&  &__e) {  &typedef  &typename  &_Dom:: &value_type  &_Tp;  &typedef  &_UnClos< &__$_Name, &_Expr, &_Dom>  &_Closure;  &return  &_Expr< &_Closure, &_Tp>( &_Closure( &__e())); }  &template< &typename  &_Tp>  &inline  &_Expr< &_UnClos< &__$_Name, &_ValArray, &_Tp>, &_Tp> $_Name( &const  &valarray< &_Tp>&  &__v) {  &typedef  &_UnClos< &__$_Name, &_ValArray, &_Tp>  &_Closure;  &return  &_Expr< &_Closure, &_Tp>( &_Closure( &__v)); });
    }' unless defined(&_DEFINE_EXPR_UNARY_FUNCTION);
    undef(&_DEFINE_EXPR_UNARY_FUNCTION) if defined(&_DEFINE_EXPR_UNARY_FUNCTION);
    eval 'sub _DEFINE_EXPR_BINARY_FUNCTION {
        my($_Fun) = @_;
	    eval q( &template< &class  &_Dom1,  &class  &_Dom2>  &inline  &_Expr< &_BinClos< &__$_Fun, &_Expr, &_Expr, &_Dom1, &_Dom2>,  &typename  &_Dom1:: &value_type> $_Fun( &const  &_Expr< &_Dom1, &typename  &_Dom1:: &value_type>&  &__e1,  &const  &_Expr< &_Dom2, &typename  &_Dom2:: &value_type>&  &__e2) {  &typedef  &typename  &_Dom1:: &value_type  &_Tp;  &typedef  &_BinClos< &__$_Fun, &_Expr, &_Expr, &_Dom1, &_Dom2>  &_Closure;  &return  &_Expr< &_Closure, &_Tp>( &_Closure( &__e1(),  &__e2())); }  &template< &class  &_Dom>  &inline  &_Expr< &_BinClos< &__$_Fun,  &_Expr,  &_ValArray,  &_Dom,  &typename  &_Dom:: &value_type>,  &typename  &_Dom:: &value_type> $_Fun( &const  &_Expr< &_Dom, &typename  &_Dom:: &value_type>&  &__e,  &const  &valarray< &typename  &_Dom:: &value_type>&  &__v) {  &typedef  &typename  &_Dom:: &value_type  &_Tp;  &typedef  &_BinClos< &__$_Fun,  &_Expr,  &_ValArray,  &_Dom,  &_Tp>  &_Closure;  &return  &_Expr< &_Closure, &_Tp>( &_Closure( &__e(),  &__v)); }  &template< &class  &_Dom>  &inline  &_Expr< &_BinClos< &__$_Fun,  &_ValArray,  &_Expr,  &typename  &_Dom:: &value_type, &_Dom>,  &typename  &_Dom:: &value_type> $_Fun( &const  &valarray< &typename  &_Dom:: &valarray>&  &__v,  &const  &_Expr< &_Dom, &typename  &_Dom:: &value_type>&  &__e) {  &typedef  &typename  &_Dom:: &value_type  &_Tp;  &typedef  &_BinClos< &__$_Fun, &_ValArray, &_Expr, &_Tp, &_Dom>  &_Closure;  &return  &_Expr< &_Closure, &_Tp>( &_Closure( &__v,  &__e())); }  &template< &class  &_Dom>  &inline  &_Expr< &_BinClos< &__$_Fun, &_Expr, &_Constant, &_Dom,  &typename  &_Dom:: &value_type>,  &typename  &_Dom:: &value_type> $_Fun( &const  &_Expr< &_Dom,  &typename  &_Dom:: &value_type>&  &__e,  &const  &typename  &_Dom:: &value_type&  &__t) {  &typedef  &typename  &_Dom:: &value_type  &_Tp;  &typedef  &_BinClos< &__$_Fun, &_Expr, &_Constant, &_Dom, &_Tp>  &_Closure;  &return  &_Expr< &_Closure, &_Tp>( &_Closure( &__e(),  &__t)); }  &template< &class  &_Dom>  &inline  &_Expr< &_BinClos< &__$_Fun, &_Constant, &_Expr,  &typename  &_Dom:: &value_type, &_Dom>,  &typename  &_Dom:: &value_type> $_Fun( &const  &typename  &_Dom:: &value_type&  &__t,  &const  &_Expr< &_Dom, &typename  &_Dom:: &value_type>&  &__e) {  &typedef  &typename  &_Dom:: &value_type  &_Tp;  &typedef  &_BinClos< &__$_Fun,  &_Constant, &_Expr, &_Tp, &_Dom>  &_Closure;  &return  &_Expr< &_Closure, &_Tp>( &_Closure( &__t,  &__e())); }  &template< &typename  &_Tp>  &inline  &_Expr< &_BinClos< &__$_Fun, &_ValArray, &_ValArray, &_Tp, &_Tp>,  &_Tp> $_Fun( &const  &valarray< &_Tp>&  &__v,  &const  &valarray< &_Tp>&  &__w) {  &typedef  &_BinClos< &__$_Fun, &_ValArray, &_ValArray, &_Tp, &_Tp>  &_Closure;  &return  &_Expr< &_Closure, &_Tp>( &_Closure( &__v,  &__w)); }  &template< &typename  &_Tp>  &inline  &_Expr< &_BinClos< &__$_Fun, &_ValArray, &_Constant, &_Tp, &_Tp>, &_Tp> $_Fun( &const  &valarray< &_Tp>&  &__v,  &const  &_Tp&  &__t) {  &typedef  &_BinClos< &__$_Fun, &_ValArray, &_Constant, &_Tp, &_Tp>  &_Closure;  &return  &_Expr< &_Closure, &_Tp>( &_Closure( &__v,  &__t)); }  &template< &typename  &_Tp>  &inline  &_Expr< &_BinClos< &__$_Fun, &_Constant, &_ValArray, &_Tp, &_Tp>, &_Tp> $_Fun( &const  &_Tp&  &__t,  &const  &valarray< &_Tp>&  &__v) {  &typedef  &_BinClos< &__$_Fun, &_Constant, &_ValArray, &_Tp, &_Tp>  &_Closure;  &return  &_Expr< &_Closure, &_Tp>( &_Closure( &__t,  &__v)); });
    }' unless defined(&_DEFINE_EXPR_BINARY_FUNCTION);
    undef(&_DEFINE_EXPR_BINARY_FUNCTION) if defined(&_DEFINE_EXPR_BINARY_FUNCTION);
}
1;
