- 主题:vs2022的template specialization在编译的时候是不是有什么改变
class A
{
template<typename return_t>
return_t Getter(int index) const noexcept
{
static_assert<false, "not this type">;
}
}
template<>
int A::Getter(int index) const noexcept
{
return 1;
}
cpp里只用了特化的 Getter<int>(1),没有用别的,居然编译不过去,说static_assert fail
是改了什么什么东西吗?还是必须要用concept写了?concept怎么加定制化的error msg?
--
FROM 122.234.59.*
利用SFINAE,在没有特化类型带入模板的时候显示错误代码啊,这不是传统技能么
后来改成static_assert()里用concept就好了
是不是因为现在有module,所以即使代码里没有用到的模板代码,也要类似预先编译一次?以前模板里的代码,要是没有被使用过,是不会被编译的
【 在 mvtec 的大作中提到: 】
: 你这出错太正常了
: 不知道你的意图是什么
--
FROM 122.234.59.*
主要还是想通过static_assert加一些用户报错信息
concept的报错信息有时候还是不太好读
【 在 z16166 的大作中提到: 】
: concept是个好东西。以前我老烦这种易错的隐式转换,得用变通的workaround,
: bool Foo() { return 1; }
: 现在比较轻松了
: ...................
--
FROM 60.191.0.*