gus*_*gus 10 c++ g++ variadic-templates
所以我把这个程序给了g ++和clang(在Linux上,x86_64):
#include <iostream>
using namespace std;
template<char... Cs>
struct A {
static const string s;
static A a;
~A() {
cout << "s = " << s << "\n";
}
};
template<char... Cs>
const string A<Cs...>::s = {{Cs...}};
template<char... Cs>
A<Cs...> A<Cs...>::a;
int main(void)
{
(void)A<'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'>::a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Clang输出s = aaaaaaaaaaaaaaaa(如预期的那样).
g ++(版本5到8)输出s = s = aaaaaaaa(非常意外).
如果不使用可变参数模板,则不会发生这种情况(如果删除所有<>代码并内联字符列表以进行初始化A::s.
如果替换std::string字符数组(并A<Cs...>::s = {Cs...}改为使用),也不会发生这种情况.
这段代码不是故意的,还是编译器错误?
| 归档时间: |
|
| 查看次数: |
152 次 |
| 最近记录: |