>192-197

下の様に、sizeof, decltype を移動させたら、あっさり動きました。失礼しました。

template <typename STR>
struct helper
{
enum {
item_size = sizeof(decltype(STR()[0])),
};
};

extern void* enabler;

// 1バイト版
template <typename STR, typename std::enable_if<helper<STR>::item_size == 1>::type *& = enabler>
void hoge(const STR&)
{
}

// 2バイト版
template <typename STR, typename std::enable_if<helper<STR>::item_size == 2>::type *& = enabler>
void hoge(const STR&)
{
}

void main() {
std::string a;
hoge(a); // 1バイト版
std::wstring w;
hoge(w); // 2バイト版
}