Rewrite Question Mark in Post Template with URL Parameter for clean URLs

Your should add rewrite endpoint template on theme activation hook and init hook. Also there is some little checks to perform to prevent errors.

function sjc_theme_activate(){
    sjc_theme_add_rewrite_endpoint();
    flush_rewrite_rules();
}
//for more info http://codex.wordpress.org/Plugin_API/Action_Reference/after_switch_theme
add_action( 'after_switch_theme', 'sjc_theme_activate' );


function sjc_theme_deactivate(){
    flush_rewrite_rules();
}
//for more info http://codex.wordpress.org/Plugin_API/Action_Reference/switch_theme
add_action( 'switch_theme', 'sjc_theme_deactivate' );

function sjc_add_query_vars($vars) {
    $vars[] = 'template';
    return $vars;
}
add_filter('query_vars', 'sjc_add_query_vars');

function sjc_template($template) {
    global $wp_query;
    //you should check if file exists first
    if ( (isset($wp_query->query_vars['template'])) && ($wp_query->query_vars['template'] == 'basic') && (file_exists(dirname( __FILE__ ) . '/single-basic.php')) ) {
        return dirname( __FILE__ ) . '/single-basic.php';
    }else {
        return $template;
    }
}
add_filter('single_template', 'sjc_template');

//add rewrite endpoint
function sjc_theme_add_rewrite_endpoint(){
     add_rewrite_endpoint( 'template', EP_PERMALINK | EP_PAGES );
}
//for more info http://codex.wordpress.org/Rewrite_API/add_rewrite_endpoint
add_action('init', 'sjc_theme_add_rewrite_endpoint');

then Activate pretty links for wordpress. You can visit any post with
http://example.com/post-title/?template=basic
http://example.com/post-title/template/basic
And get the same result (don’t forget to add single-basic.php file in theme base dir). I hope this will help you.