我有兩個功能C++ SFINAE解析順序
template <typename... Args>
void foo(Args&&... args) { /* ... */ }
template <typename... Args>
void foo(const std::string& name, Args&&... args) { /* ... */ }
目前像foo("bar", /* arguments */)
所有的呼叫嘗試去的第一個函數,而不是第二。我想重新排序這些函數,以便SFINAE在第一個之前找到第二個函數。我無法使用std::enable_if
來檢查字符數組/字符串,因爲Args...
數據包可能包含std::string&
或const char (&) []
。我該怎麼做呢?
或添加過載'爲const char *' – Sopel
@ Rakete1111 http://coliru.stacked-crooked.com/a/6367292d4c72cd8c – Sopel
嗯,不會'foo(「bar」s)'使第一個參數成爲右值,這仍然會導致第一個重載是首選? –