c ++ 11 — нединамические конструкторы в c ++ с icpc?

Есть ли способ определить не динамический конструктор, который ограничивает диапазон любого конструктора по умолчанию позволяет мне сделать

struct foo {
int *bar;
};
static __thread foo myfoo[10] = {nullptr};

?

т.е. я хочу сделать

class baz {
public:
baz() = default;
constexpr baz(decltype(nullptr)) : qux(nullptr) { }

private:
int *qux;
};
static __thread baz mybaz[10] = {nullptr};

и это работает.

В настоящее время ICPC говорит мне

main.cpp(9): error: thread-local variable cannot be dynamically initialized
static __thread baz mybaz[10] = {nullptr};
^

1

Решение

Это:

static __thread baz mybaz[10] = {nullptr};

эквивалентно:

static __thread baz mybaz[10] = {baz(nullptr), baz(), baz(), baz(), baz(), ..., baz()};

Поскольку это общее правило, неявная инициализация элемента массива по умолчанию является конструктором.

Так что либо сделайте это:

static __thread baz mybaz[10] = {nullptr, nullptr, nullptr, ..., nullptr};

Или сделайте ваш конструктор по умолчанию также constexpr …

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector