一个lambda什么时候保证是微不足道的,如果有的话?
我认为,如果它只捕获琐碎的类型或什么都没有,那将是微不足道的.我没有任何标准可以支持它.
我的动机是将一些代码从Visual C++ 12转移到14,并发现一些静态断言在处理lambdas时失败了我认为是微不足道的.
例:
#include <type_traits>
#include <iostream>
using namespace std;
int main()
{
auto lambda = [](){};
cout << boolalpha << is_trivially_copyable<decltype(lambda)>{} << endl;
}
Run Code Online (Sandbox Code Playgroud)
这false在vs140上产生,但true在vs120和clang中产生.由于没有gcc> = 5,我无法测试gcc.我希望这是vs140的回归,但我不确定这里的正确行为.
假设我想写一个比较排序函数,我可以提示输入必须是一个序列 with Sequence[T](或MutableSequence[T]在这种情况下)。
from typing import MutableSequence, T
def comparison_sort(s: MutableSequence[T]) -> None:
pass
Run Code Online (Sandbox Code Playgroud)
然而,似乎没有一种开箱即用的方式来暗示T必须具有可比性。(似乎没有Comparable或Ordered任何东西typing。)我怎样才能做到这一点?我想避免指定一组特定的类型,例如int, float, 'str` 以便用户也可以暗示他们自己的类型是可比较的。
考虑以下代码:
#include <iostream>
#include <string>
#include <map>
using namespace std;
class Foo
{
public:
Foo() : _x(0)
{
cout << "Default" << endl;
}
Foo(int a) : _x(a)
{
cout << "Param" << endl;
}
Foo(Foo const &foo) :
_x(foo._x)
{
cout << "Copy" << endl;
}
Foo& operator=(Foo const &foo)
{
cout << "Assignment" << endl;
_x = foo._x;
return *this;
}
int get(void)
{
return _x;
}
private:
int _x;
};
int main(int argc, char *argv [])
{ …Run Code Online (Sandbox Code Playgroud) 我正在使用假设4.24.6和pytest-5.0.0运行测试套件。我的测试有一组有限的可能输入,但是假设从未完成测试。
我将其简化为以下最小示例,我将其作为 pytest test.py
from hypothesis import given
import hypothesis.strategies as st
@given(x=st.just(0)
| st.just(1),
y=st.just(0)
| st.just(1)
| st.just(2))
def test_x_y(x, y):
assert True
Run Code Online (Sandbox Code Playgroud)
我希望它在这里尝试所有六个组合然后再成功。或者可能是检查薄脆性的一小部分。相反,它会无限期运行(在大约15分钟的测试后,我将其杀死了。)
如果我中断测试,追溯记录似乎表明它只是不断产生新的例子。
我在这里做错了什么?