add SFINAE: tuple flexibly construction