Issue allow only one product in WooCommerce cart

Solution:

You could use WC()->cart->empty_cart(); instead

function filter_woocommerce_add_to_cart_validation( $passed, $product_id, $quantity, $variation_id = null, $variations = null ) {
    // When NOT empty
    if ( ! WC()->cart->is_empty() ) {
        // Empties the cart and optionally the persistent cart too.
        WC()->cart->empty_cart();
    }

    return $passed;
}
add_filter( 'woocommerce_add_to_cart_validation', 'filter_woocommerce_add_to_cart_validation', 10, 5 );

If the above does not work for some reason, you can also apply it in the following way: (Solution for PHP 7.3 and up)

// Used to calculate totals
function action_woocommerce_before_calculate_totals( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;
    
    // Get cart
    $get_cart = $cart->get_cart();

    // Solution for PHP 7.3 and up
    foreach ( $get_cart as $cart_item_key => $cart_item ) {
        // NOT last element
        if ( $cart_item_key !== array_key_last( $get_cart ) ) {
            // Remove a cart item
            $cart->remove_cart_item( $cart_item_key );
        }
    }
}
add_action( 'woocommerce_before_calculate_totals', 'action_woocommerce_before_calculate_totals', 10, 1 );