auto OperatorTypeVisitor()

in onnxruntime/core/providers/dml/DmlExecutionProvider/src/External/DirectMLHelpers/ApiTraits.h [2069:2390]


auto OperatorTypeVisitor(DML_OPERATOR_TYPE type, Visitor&& visitor, Ts&&... args)
{
    switch (static_cast<uint32_t>(type))
    {
    case DML_OPERATOR_ELEMENT_WISE_IDENTITY:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_IDENTITY_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_ABS:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_ABS_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_ACOS:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_ACOS_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_ADD:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_ADD_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_ASIN:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_ASIN_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_ATAN:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_ATAN_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_CEIL:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_CEIL_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_CLIP:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_CLIP_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_CLIP1:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_CLIP1_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_CLIP_GRAD:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_CLIP_GRAD_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_CLIP_GRAD1:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_CLIP_GRAD1_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_COS:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_COS_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_DIVIDE:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_DIVIDE_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_EXP:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_EXP_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_FLOOR:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_FLOOR_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_LOG:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_LOG_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_LOGICAL_AND:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_LOGICAL_AND_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_LOGICAL_EQUALS:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_LOGICAL_EQUALS_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_LOGICAL_GREATER_THAN:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_LOGICAL_GREATER_THAN_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_LOGICAL_LESS_THAN:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_LOGICAL_LESS_THAN_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_LOGICAL_GREATER_THAN_OR_EQUAL:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_LOGICAL_GREATER_THAN_OR_EQUAL_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_LOGICAL_LESS_THAN_OR_EQUAL:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_LOGICAL_LESS_THAN_OR_EQUAL_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_LOGICAL_NOT:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_LOGICAL_NOT_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_LOGICAL_OR:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_LOGICAL_OR_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_LOGICAL_XOR:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_LOGICAL_XOR_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_MAX:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_MAX_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_MEAN:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_MEAN_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_MIN:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_MIN_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_MULTIPLY:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_MULTIPLY_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_POW:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_POW_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_CONSTANT_POW:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_CONSTANT_POW_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_RECIP:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_RECIP_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_SIN:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_SIN_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_SQRT:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_SQRT_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_DIFFERENCE_SQUARE:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_DIFFERENCE_SQUARE_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_ATAN_YX:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_ATAN_YX_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_SUBTRACT:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_SUBTRACT_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_TAN:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_TAN_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_THRESHOLD:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_THRESHOLD_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_QUANTIZE_LINEAR:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_QUANTIZE_LINEAR_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_DEQUANTIZE_LINEAR:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_DEQUANTIZE_LINEAR_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_CONVOLUTION:
        return std::invoke(std::forward<Visitor>(visitor), DML_CONVOLUTION_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_GEMM:
        return std::invoke(std::forward<Visitor>(visitor), DML_GEMM_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_REDUCE:
        return std::invoke(std::forward<Visitor>(visitor), DML_REDUCE_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ARGMIN:
        return std::invoke(std::forward<Visitor>(visitor), DML_ARGMIN_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ARGMAX:
        return std::invoke(std::forward<Visitor>(visitor), DML_ARGMAX_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_AVERAGE_POOLING:
        return std::invoke(std::forward<Visitor>(visitor), DML_AVERAGE_POOLING_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_LP_POOLING:
        return std::invoke(std::forward<Visitor>(visitor), DML_LP_POOLING_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_MAX_POOLING:
        return std::invoke(std::forward<Visitor>(visitor), DML_MAX_POOLING_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_MAX_POOLING1:
        return std::invoke(std::forward<Visitor>(visitor), DML_MAX_POOLING1_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ROI_POOLING:
        return std::invoke(std::forward<Visitor>(visitor), DML_ROI_POOLING_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_SLICE:
        return std::invoke(std::forward<Visitor>(visitor), DML_SLICE_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_CAST:
        return std::invoke(std::forward<Visitor>(visitor), DML_CAST_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_SPLIT:
        return std::invoke(std::forward<Visitor>(visitor), DML_SPLIT_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_JOIN:
        return std::invoke(std::forward<Visitor>(visitor), DML_JOIN_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_PADDING:
        return std::invoke(std::forward<Visitor>(visitor), DML_PADDING_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_PADDING1:
        return std::invoke(std::forward<Visitor>(visitor), DML_PADDING1_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_VALUE_SCALE_2D:
        return std::invoke(std::forward<Visitor>(visitor), DML_VALUE_SCALE_2D_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_UPSAMPLE_2D:
        return std::invoke(std::forward<Visitor>(visitor), DML_UPSAMPLE_2D_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_GATHER:
        return std::invoke(std::forward<Visitor>(visitor), DML_GATHER_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_SPACE_TO_DEPTH:
        return std::invoke(std::forward<Visitor>(visitor), DML_SPACE_TO_DEPTH_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_DEPTH_TO_SPACE:
        return std::invoke(std::forward<Visitor>(visitor), DML_DEPTH_TO_SPACE_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_TILE:
        return std::invoke(std::forward<Visitor>(visitor), DML_TILE_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_TOP_K:
        return std::invoke(std::forward<Visitor>(visitor), DML_TOP_K_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_BATCH_NORMALIZATION:
        return std::invoke(std::forward<Visitor>(visitor), DML_BATCH_NORMALIZATION_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_BATCH_NORMALIZATION_GRAD:
        return std::invoke(std::forward<Visitor>(visitor), DML_BATCH_NORMALIZATION_GRAD_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_BATCH_NORMALIZATION_TRAINING_GRAD:
        return std::invoke(std::forward<Visitor>(visitor), DML_BATCH_NORMALIZATION_TRAINING_GRAD_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_MEAN_VARIANCE_NORMALIZATION:
        return std::invoke(std::forward<Visitor>(visitor), DML_MEAN_VARIANCE_NORMALIZATION_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_LOCAL_RESPONSE_NORMALIZATION:
        return std::invoke(std::forward<Visitor>(visitor), DML_LOCAL_RESPONSE_NORMALIZATION_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_LOCAL_RESPONSE_NORMALIZATION_GRAD:
        return std::invoke(std::forward<Visitor>(visitor), DML_LOCAL_RESPONSE_NORMALIZATION_GRAD_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_LP_NORMALIZATION:
        return std::invoke(std::forward<Visitor>(visitor), DML_LP_NORMALIZATION_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_RNN:
        return std::invoke(std::forward<Visitor>(visitor), DML_RNN_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_LSTM:
        return std::invoke(std::forward<Visitor>(visitor), DML_LSTM_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_GRU:
        return std::invoke(std::forward<Visitor>(visitor), DML_GRU_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_SIGN:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_SIGN_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_IS_NAN:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_IS_NAN_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_NEGATE:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_NEGATE_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_ERF:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_ERF_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_SINH:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_SINH_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_COSH:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_COSH_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_TANH:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_TANH_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_ASINH:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_ASINH_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_ACOSH:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_ACOSH_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_ATANH:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_ATANH_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_IF:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_IF_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_ADD1:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_ADD1_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_MAX_UNPOOLING:
        return std::invoke(std::forward<Visitor>(visitor), DML_MAX_UNPOOLING_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_DIAGONAL_MATRIX:
        return std::invoke(std::forward<Visitor>(visitor), DML_DIAGONAL_MATRIX_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_SCATTER:
        return std::invoke(std::forward<Visitor>(visitor), DML_SCATTER_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ONE_HOT:
        return std::invoke(std::forward<Visitor>(visitor), DML_ONE_HOT_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_RESAMPLE:
        return std::invoke(std::forward<Visitor>(visitor), DML_RESAMPLE_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_BIT_SHIFT_LEFT:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_BIT_SHIFT_LEFT_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_BIT_SHIFT_RIGHT:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_BIT_SHIFT_RIGHT_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_ROUND:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_ROUND_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_IS_INFINITY:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_IS_INFINITY_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_MODULUS_TRUNCATE:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_MODULUS_TRUNCATE_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_MODULUS_FLOOR:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_MODULUS_FLOOR_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_FILL_VALUE_CONSTANT:
        return std::invoke(std::forward<Visitor>(visitor), DML_FILL_VALUE_CONSTANT_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_FILL_VALUE_SEQUENCE:
        return std::invoke(std::forward<Visitor>(visitor), DML_FILL_VALUE_SEQUENCE_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_CUMULATIVE_SUMMATION:
        return std::invoke(std::forward<Visitor>(visitor), DML_CUMULATIVE_SUMMATION_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_CUMULATIVE_PRODUCT:
        return std::invoke(std::forward<Visitor>(visitor), DML_CUMULATIVE_PRODUCT_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_REVERSE_SUBSEQUENCES:
        return std::invoke(std::forward<Visitor>(visitor), DML_REVERSE_SUBSEQUENCES_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_GATHER_ELEMENTS:
        return std::invoke(std::forward<Visitor>(visitor), DML_GATHER_ELEMENTS_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_GATHER_ND:
        return std::invoke(std::forward<Visitor>(visitor), DML_GATHER_ND_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_SCATTER_ND:
        return std::invoke(std::forward<Visitor>(visitor), DML_SCATTER_ND_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_MAX_POOLING2:
        return std::invoke(std::forward<Visitor>(visitor), DML_MAX_POOLING2_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_SLICE1:
        return std::invoke(std::forward<Visitor>(visitor), DML_SLICE1_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_TOP_K1:
        return std::invoke(std::forward<Visitor>(visitor), DML_TOP_K1_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_DEPTH_TO_SPACE1:
        return std::invoke(std::forward<Visitor>(visitor), DML_DEPTH_TO_SPACE1_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_SPACE_TO_DEPTH1:
        return std::invoke(std::forward<Visitor>(visitor), DML_SPACE_TO_DEPTH1_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_MEAN_VARIANCE_NORMALIZATION1:
        return std::invoke(std::forward<Visitor>(visitor), DML_MEAN_VARIANCE_NORMALIZATION1_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_RESAMPLE1:
        return std::invoke(std::forward<Visitor>(visitor), DML_RESAMPLE1_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_MATRIX_MULTIPLY_INTEGER:
        return std::invoke(std::forward<Visitor>(visitor), DML_MATRIX_MULTIPLY_INTEGER_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_QUANTIZED_LINEAR_MATRIX_MULTIPLY:
        return std::invoke(std::forward<Visitor>(visitor), DML_QUANTIZED_LINEAR_MATRIX_MULTIPLY_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_CONVOLUTION_INTEGER:
        return std::invoke(std::forward<Visitor>(visitor), DML_CONVOLUTION_INTEGER_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_QUANTIZED_LINEAR_CONVOLUTION:
        return std::invoke(std::forward<Visitor>(visitor), DML_QUANTIZED_LINEAR_CONVOLUTION_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_BIT_AND:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_BIT_AND_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_BIT_OR:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_BIT_OR_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_BIT_XOR:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_BIT_XOR_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_BIT_NOT:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_BIT_NOT_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_BIT_COUNT:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_BIT_COUNT_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ACTIVATION_RELU_GRAD:
        return std::invoke(std::forward<Visitor>(visitor), DML_ACTIVATION_RELU_GRAD_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_AVERAGE_POOLING_GRAD:
        return std::invoke(std::forward<Visitor>(visitor), DML_AVERAGE_POOLING_GRAD_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_MAX_POOLING_GRAD:
        return std::invoke(std::forward<Visitor>(visitor), DML_MAX_POOLING_GRAD_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_RANDOM_GENERATOR:
        return std::invoke(std::forward<Visitor>(visitor), DML_RANDOM_GENERATOR_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_NONZERO_COORDINATES:
        return std::invoke(std::forward<Visitor>(visitor), DML_NONZERO_COORDINATES_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_RESAMPLE_GRAD:
        return std::invoke(std::forward<Visitor>(visitor), DML_RESAMPLE_GRAD_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_SLICE_GRAD:
        return std::invoke(std::forward<Visitor>(visitor), DML_SLICE_GRAD_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ADAM_OPTIMIZER:
        return std::invoke(std::forward<Visitor>(visitor), DML_ADAM_OPTIMIZER_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ROI_ALIGN:
        return std::invoke(std::forward<Visitor>(visitor), DML_ROI_ALIGN_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ROI_ALIGN1:
        return std::invoke(std::forward<Visitor>(visitor), DML_ROI_ALIGN1_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_GATHER_ND1:
        return std::invoke(std::forward<Visitor>(visitor), DML_GATHER_ND1_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_DYNAMIC_QUANTIZE_LINEAR:
        return std::invoke(std::forward<Visitor>(visitor), DML_DYNAMIC_QUANTIZE_LINEAR_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ELEMENT_WISE_QUANTIZED_LINEAR_ADD:
        return std::invoke(std::forward<Visitor>(visitor), DML_ELEMENT_WISE_QUANTIZED_LINEAR_ADD_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ROI_ALIGN_GRAD:
        return std::invoke(std::forward<Visitor>(visitor), DML_ROI_ALIGN_GRAD_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_BATCH_NORMALIZATION_TRAINING:
        return std::invoke(std::forward<Visitor>(visitor), DML_BATCH_NORMALIZATION_TRAINING_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ACTIVATION_ELU:
        return std::invoke(std::forward<Visitor>(visitor), DML_ACTIVATION_ELU_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ACTIVATION_CELU:
        return std::invoke(std::forward<Visitor>(visitor), DML_ACTIVATION_CELU_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ACTIVATION_HARDMAX:
        return std::invoke(std::forward<Visitor>(visitor), DML_ACTIVATION_HARDMAX_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ACTIVATION_HARD_SIGMOID:
        return std::invoke(std::forward<Visitor>(visitor), DML_ACTIVATION_HARD_SIGMOID_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ACTIVATION_IDENTITY:
        return std::invoke(std::forward<Visitor>(visitor), DML_ACTIVATION_IDENTITY_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ACTIVATION_LEAKY_RELU:
        return std::invoke(std::forward<Visitor>(visitor), DML_ACTIVATION_LEAKY_RELU_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ACTIVATION_LINEAR:
        return std::invoke(std::forward<Visitor>(visitor), DML_ACTIVATION_LINEAR_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ACTIVATION_LOG_SOFTMAX:
        return std::invoke(std::forward<Visitor>(visitor), DML_ACTIVATION_LOG_SOFTMAX_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ACTIVATION_PARAMETERIZED_RELU:
        return std::invoke(std::forward<Visitor>(visitor), DML_ACTIVATION_PARAMETERIZED_RELU_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ACTIVATION_PARAMETRIC_SOFTPLUS:
        return std::invoke(std::forward<Visitor>(visitor), DML_ACTIVATION_PARAMETRIC_SOFTPLUS_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ACTIVATION_RELU:
        return std::invoke(std::forward<Visitor>(visitor), DML_ACTIVATION_RELU_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ACTIVATION_SCALED_ELU:
        return std::invoke(std::forward<Visitor>(visitor), DML_ACTIVATION_SCALED_ELU_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ACTIVATION_SCALED_TANH:
        return std::invoke(std::forward<Visitor>(visitor), DML_ACTIVATION_SCALED_TANH_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ACTIVATION_SIGMOID:
        return std::invoke(std::forward<Visitor>(visitor), DML_ACTIVATION_SIGMOID_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ACTIVATION_SOFTMAX:
        return std::invoke(std::forward<Visitor>(visitor), DML_ACTIVATION_SOFTMAX_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ACTIVATION_SOFTPLUS:
        return std::invoke(std::forward<Visitor>(visitor), DML_ACTIVATION_SOFTPLUS_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ACTIVATION_SOFTSIGN:
        return std::invoke(std::forward<Visitor>(visitor), DML_ACTIVATION_SOFTSIGN_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ACTIVATION_TANH:
        return std::invoke(std::forward<Visitor>(visitor), DML_ACTIVATION_TANH_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ACTIVATION_THRESHOLDED_RELU:
        return std::invoke(std::forward<Visitor>(visitor), DML_ACTIVATION_THRESHOLDED_RELU_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    case DML_OPERATOR_ACTIVATION_SHRINK:
        return std::invoke(std::forward<Visitor>(visitor), DML_ACTIVATION_SHRINK_OPERATOR_DESC{}, std::forward<Ts>(args)...);

    default:
        ORT_THROW_HR(E_INVALIDARG);
        return std::invoke(std::forward<Visitor>(visitor), DML_ACTIVATION_RELU_OPERATOR_DESC{}, std::forward<Ts>(args)...);
    }
}