我有以下示例代码,它使用字符串文字作为模板参数,以便基类模板可以访问该字符串。
代码编译,但我收到一个我不完全理解的警告:
警告:'ns::bar::type' 有一个基 'ns::base<((const char*)(& ns::bar::name))>',其类型使用匿名命名空间 [默认启用]
下面的工作示例代码:
// "test.h"
#pragma once
namespace ns
{
template <char const* str>
struct base
{
const char *name() const { return str; }
};
namespace bar
{
static constexpr char name[] = "bar";
struct type : base<name> {}; // <-- this line here
}
}
// main.cpp
#include <iostream>
#include "test.h"
int main()
{
ns::bar::type f;
std::cout << f.name() << std::endl;
return 0;
}
所以我的问题是:
- 这个警告是什么意思?
- 以我在这里所做的方式将字符串文字作为模板参数传递是否安全?
(注意这是 gcc 4.7.2)