以下代码会使应用程序崩溃或输出无意义的内容。如果将基类的初始化替换为
str_int{ string{V}, 0}
,那么它就可以正常工作。似乎在某些在线编译器上工作正常。#include <iostream>
#include <utility>
using namespace std;
using str_int = pair<string, int>;
template< const char* V >
struct C : public str_int
{
C() : str_int{ V, 0} {}
};
constexpr const char str[] = "abc";
int main()
{
// works fine
str_int si{str, 0};
cout << si.first;
// crashes the application or prints gibberish
C<str> c;
cout << c.first;
}
<string>
头文件。添加这个头文件会对你的测试有什么影响吗? - Richard Critten<string>
头文件并不能解决问题(虽然这是一个好的发现)。 - Adrian Mole<string>
没有任何效果。 - zdfstd::pair
或std::string
无关,我已经报告了一个简化版本:https://developercommunity.visualstudio.com/t/bad-code-generation-on-passing-template-const-char/1534999 - Alex Guteniev