- 主题: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.*
你这出错太正常了
不知道你的意图是什么
【 在 ziqin 的大作中提到: 】
: class A
: {
: template<typename return_t>
: ...................
--
FROM 172.58.30.*
利用SFINAE,在没有特化类型带入模板的时候显示错误代码啊,这不是传统技能么
后来改成static_assert()里用concept就好了
是不是因为现在有module,所以即使代码里没有用到的模板代码,也要类似预先编译一次?以前模板里的代码,要是没有被使用过,是不会被编译的
【 在 mvtec 的大作中提到: 】
: 你这出错太正常了
: 不知道你的意图是什么
--
FROM 122.234.59.*
但是你的code和SFINAE一点关系都没有啊
【 在 ziqin 的大作中提到: 】
: 利用SFINAE,在没有特化类型带入模板的时候显示错误代码啊,这不是传统技能么
: 后来改成static_assert()里用concept就好了
: 是不是因为现在有module,所以即使代码里没有用到的模板代码,也要类似预先编译一次?以前模板里的代码,要是没有被使用过,是不会被编译的
: ...................
--
FROM 45.14.195.*
移植2022遇到了,不让直接用非类型参数作为参数,要改一个专门的_t类型
有了chatgpt以后,移植很快。我也放下要记住用法、并弄清楚设计初衷的想法了。
时代变了。
【 在 ziqin 的大作中提到: 】
: class A
: {
: template<typename return_t>
: ...................
--
修改:DoorWay FROM 171.82.125.*
FROM 171.82.125.*
concept是个好东西。以前我老烦这种易错的隐式转换,得用变通的workaround,
bool Foo() { return 1; }
现在比较轻松了
template <typename T>
concept IsBoolean = std::is_same_v<T, bool>;
// 使用概念来限制函数返回类型
IsBoolean auto myFunction() {
// 编译错误:return 1; 不符合 IsBoolean 概念
return 1;
}
--
FROM 61.48.130.*
主要还是想通过static_assert加一些用户报错信息
concept的报错信息有时候还是不太好读
【 在 z16166 的大作中提到: 】
: concept是个好东西。以前我老烦这种易错的隐式转换,得用变通的workaround,
: bool Foo() { return 1; }
: 现在比较轻松了
: ...................
--
FROM 60.191.0.*
gcc的感觉可以,msvc的不太好
happy@UOS-128G:~$ /opt/cross/bin/x86_64-linux-musl-g++ -static -std=c++20 1.cpp
1.cpp: In function ‘auto [requires ::IsBoolean<<placeholder>, >] myFunction()’:
1.cpp:11:12: error: deduced return type does not satisfy placeholder constraints
11 | return 1;
| ^
1.cpp:11:12: note: constraints not satisfied
1.cpp:6:9: required for the satisfaction of ‘IsBoolean<auto [requires ::IsBoolean<<placeholder>, >]>’ [with auto [requires ::IsBoolean<<placeholder>, >] = int]
1.cpp:6:26: note: the expression ‘is_same_v<T, bool> [with T = int]’ evaluated to ‘false’
6 | concept IsBoolean = std::is_same_v<T, bool>;
| ~~~~~^~~~~~~~~~~~~~~~~~
【 在 ziqin 的大作中提到: 】
: 主要还是想通过static_assert加一些用户报错信息
: concept的报错信息有时候还是不太好读
:
--
FROM 61.48.130.*
vc的还可以
1>E:\code\testconsole\testconsole.cpp(22,9): error C7601: the associated constraints are not satisfied
1>E:\code\testconsole\testconsole.cpp(20,1): message : the concept 'IsBoolean<int>' evaluated to false
1>E:\code\testconsole\testconsole.cpp(17,21): message : the constraint was not satisfied
【 在 z16166 的大作中提到: 】
: gcc的感觉可以,msvc的不太好
: happy@UOS-128G:~$ /opt/cross/bin/x86_64-linux-musl-g++ -static -std=c++20 1.cpp
: 1.cpp: In function ‘auto [requires ::IsBoolean<<placeholder>, >] myFunction()’:
: ...................
--
FROM 223.240.212.*