調用以下函數extract
對g ++ 4.9.0(20130421)不起作用。我得到的錯誤是s1
不是一個常量表達式。如果i
可以初始化爲constexpr,那麼j
和k
也應該如此。那是錯的嗎?字符串文字參數不被接受到constexpr函數
#include <tuple>
template <unsigned N1, unsigned N2>
constexpr bool strmatch(const char (&s1)[N1], const char (&s2)[N2], unsigned i = 0)
{
return (s1[i]==s2[i]) ?
(s1[i]=='\0') ?
true
: strmatch(s1, s2, i+1)
: false;
}
template<unsigned N>
constexpr int extract(const std::tuple<int, int> & t1, const char (&array)[N]) {
return std::get<strmatch(array, "m0")>(t1);
}
int main(void)
{
constexpr int i = strmatch("m0", "m0"); // OK
constexpr int j = extract(std::make_tuple(10, 20), "m0");
constexpr int k = extract(std::make_tuple(10, 20), "m1");
return 0;
}
我75%確定這是一個編譯器錯誤。函數調用替換應該清除任何引用綁定問題。 – aschepler 2013-05-11 00:15:22