小编txt*_*elp的帖子

operator []查找模板基类

以下代码给我们带来了一些麻烦:clangMSVC接受以下代码,而GCC拒绝它.我们相信海湾合作委员会这次是正确的,但我想在提交错误报告之前确定.那么,有什么特殊的operator[]查找规则我不知道吗?

struct X{};
struct Y{};

template<typename T>
struct B
{
    void f(X) { }
    void operator[](X){}
};

template<typename T>
struct C
{
    void f(Y) { }
    void operator[](Y){}
};

template<typename T> struct D : B<T>, C<T> {};

int main()
{
    D<float> d;
    //d.f(X()); //This is erroneous in all compilers
    d[Y()];//this is accepted by clang and MSVC
}
Run Code Online (Sandbox Code Playgroud)

那么上面的代码是否正确解析函数operator[]中的main调用?

c++ gcc clang visual-c++

26
推荐指数
2
解决办法
397
查看次数

pthread SCHED_OTHER/SCHED_FIFO的sched_get_priority_min/max实现

我正在尝试为我正在研究的项目编写一个半可移植的线程类,在尝试设置线程的优先级时,我在pthread世界中遇到了一个难题.

给出以下代码:

#include <stdio.h>
#include <unistd.h>
#include <sched.h>
main()
{
    printf("Valid priority range for SCHED_OTHER: %d - %d\n",
        sched_get_priority_min(SCHED_OTHER),
        sched_get_priority_max(SCHED_OTHER));
    printf("Valid priority range for SCHED_FIFO: %d - %d\n",
        sched_get_priority_min(SCHED_FIFO),
        sched_get_priority_max(SCHED_FIFO));
    printf("Valid priority range for SCHED_RR: %d - %d\n",
        sched_get_priority_min(SCHED_RR),
        sched_get_priority_max(SCHED_RR));
}
Run Code Online (Sandbox Code Playgroud)

在OpenBSD中,这将打印以下内容:

Valid priority range for SCHED_OTHER: 0 - 31
Valid priority range for SCHED_FIFO: 0 - 31
Valid priority range for SCHED_RR: 0 - 31
Run Code Online (Sandbox Code Playgroud)

在Ubuntu中它产生了这个:

Valid priority range for SCHED_OTHER: 0 - 0
Valid priority range for SCHED_FIFO: …
Run Code Online (Sandbox Code Playgroud)

c++ linux cross-platform pthreads

5
推荐指数
1
解决办法
5448
查看次数

标签 统计

c++ ×2

clang ×1

cross-platform ×1

gcc ×1

linux ×1

pthreads ×1

visual-c++ ×1