no matching function при инициализации std::tuple
От: niXman Ниоткуда https://github.com/niXman
Дата: 09.01.21 07:16
Оценка:
привет!

есть такой код:
template<typename ...Args>
struct settings {
    using container_type = std::tuple<typename std::decay<Args>::type...>;
    container_type kwords;

    template<typename ...Types>
    explicit settings(const Types &...types)
        :kwords(types...) // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    {}
};


то есть я хочу чтоб каждый член кортежа инициализировался коснтантной ссылкой.
но получаю: error: no matching function for call to ‘std::tuple<kwords::fname_t, kwords::fsize_t, kwords::radius_t, kwords::radius2_t, kwords::poss_t>::tuple(const kwords::fname_t&, const kwords::fsize_t&, const kwords::radius_t&, const kwords::radius2_t&, const kwords::poss_t&)

все эти kwords — это некоторые структуры.

что не так?

спасибо!
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: no matching function при инициализации std::tuple
От: watchmaker  
Дата: 09.01.21 08:02
Оценка: +2
Здравствуйте, niXman, Вы писали:


X>но получаю: error: no matching function for call to ‘std::tuple<kwords::fname_t, kwords::fsize_t, kwords::radius_t, kwords::radius2_t, kwords::poss_t>::tuple(const kwords::fname_t&, const kwords::fsize_t&, const kwords::radius_t&, const kwords::radius2_t&, const kwords::poss_t&)


А остальной текст ошибки и код зачем скрыл? Чтобы сложнее было догадываться? :)

X>что не так?


Например, может отсутствовать копирующий конструктор у одной из подструктур. Но соответствующего кода в посте не приведено чтобы сказать наверняка.
Re[2]: no matching function при инициализации std::tuple
От: niXman Ниоткуда https://github.com/niXman
Дата: 09.01.21 09:04
Оценка:
Здравствуйте, watchmaker, Вы писали:

W>А остальной текст ошибки и код зачем скрыл? Чтобы сложнее было догадываться?


нет, не для этого =)

вот:
In file included from /home/nixman/projects/justsettings/main.cpp:2:
/home/nixman/projects/justsettings/./include/justsettings/justsettings.hpp: In instantiation of ‘justsettings::settings<Args>::settings(const Types& ...) [with Types = {kwords::fname_t, kwords::fsize_t, kwords::radius_t, kwords::radius2_t, kwords::poss_t}; Args = {kwords::fname_t, kwords::fsize_t, kwords::radius_t, kwords::radius2_t, kwords::poss_t}]’:
/home/nixman/projects/justsettings/./include/justsettings/justsettings.hpp:510:23:   required from ‘auto justsettings::make_settings(const Args& ...) [with Args = {kwords::fname_t, kwords::fsize_t, kwords::radius_t, kwords::radius2_t, kwords::poss_t}]’
/home/nixman/projects/justsettings/main.cpp:58:5:   required from here
/home/nixman/projects/justsettings/./include/justsettings/justsettings.hpp:325:25: error: no matching function for call to ‘std::tuple<kwords::fname_t, kwords::fsize_t, kwords::radius_t, kwords::radius2_t, kwords::poss_t>::tuple(const kwords::fname_t&, const kwords::fsize_t&, const kwords::radius_t&, const kwords::radius2_t&, const kwords::poss_t&)’
  325 |         :kwords(types...)
      |                         ^

но это тоже не всё. там очень много предположений компилятора о вариантах...


W>Например, может отсутствовать копирующий конструктор у одной из подструктур. Но соответствующего кода в посте не приведено чтобы сказать наверняка.


вряд ли. все эти структуры генерятся препроцессором.


зы
проект не завершен, потому не опубликован.
могу опубликовать, если нужно.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Отредактировано 09.01.2021 9:06 niXman . Предыдущая версия .
Re[3]: no matching function при инициализации std::tuple
От: night beast СССР  
Дата: 09.01.21 09:16
Оценка:
Здравствуйте, niXman, Вы писали:

X>зы

X>проект не завершен, потому не опубликован.
X>могу опубликовать, если нужно.

не нужно.
покажи минимальный компилируемый код, воспроизводящий проблему
Re[4]: no matching function при инициализации std::tuple
От: niXman Ниоткуда https://github.com/niXman
Дата: 09.01.21 09:18
Оценка:
Здравствуйте, night beast, Вы писали:

NB>не нужно.

NB>покажи минимальный компилируемый код, воспроизводящий проблему

тогда проще опубликовать =)
ща.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[3]: no matching function при инициализации std::tuple
От: watchmaker  
Дата: 09.01.21 09:22
Оценка: +1
Здравствуйте, niXman, Вы писали:

X>Здравствуйте, watchmaker, Вы писали:


W>>А остальной текст ошибки и код зачем скрыл? Чтобы сложнее было догадываться?


X>нет, не для этого =)


X>вот:

X>но это тоже не всё.

Так зачем ты эту важную информацию скрываешь?!
Даже сейчас. Или намёк, что нужно показать сообщение об ошибке и соответствующий код, был не понят?

X>могу опубликовать, если нужно.


Лол. Как будто это нам нужно решить эту проблему, а не тебе

Но если серьёзно, лучше вычлени оттуда минимальный пример.
Re[4]: no matching function при инициализации std::tuple
От: niXman Ниоткуда https://github.com/niXman
Дата: 09.01.21 09:27
Оценка:
готово: https://github.com/niXman/ttt

использование: https://github.com/niXman/ttt/blob/master/main.cpp#L58

вот `justsettings.hpp:510`: https://github.com/niXman/ttt/blob/master/include/justsettings/justsettings.hpp#L510
вот `justsettings.hpp:325`: https://github.com/niXman/ttt/blob/master/include/justsettings/justsettings.hpp#L325

могу еще как-то помочь?

зы
проект о том, чтоб реализовать именованные аргументы + парсить argv используя именованные аргументы.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[5]: no matching function при инициализации std::tuple
От: vopl Россия  
Дата: 09.01.21 09:49
Оценка: 9 (1) +1
Здравствуйте, niXman, Вы писали:

X>готово: https://github.com/niXman/ttt


X>использование: https://github.com/niXman/ttt/blob/master/main.cpp#L58


X>вот `justsettings.hpp:510`: https://github.com/niXman/ttt/blob/master/include/justsettings/justsettings.hpp#L510

X>вот `justsettings.hpp:325`: https://github.com/niXman/ttt/blob/master/include/justsettings/justsettings.hpp#L325

X>могу еще как-то помочь?


X>зы

X>проект о том, чтоб реализовать именованные аргументы + парсить argv используя именованные аргументы.

struct optional_type {
    optional_type(const optional_type &) = delete; // <------------------ это
Re[6]: no matching function при инициализации std::tuple
От: niXman Ниоткуда https://github.com/niXman
Дата: 09.01.21 09:54
Оценка:
Здравствуйте, vopl, Вы писали:

V>
V>struct optional_type {
V>    optional_type(const optional_type &) = delete; // <------------------ это
V>


думаю нет, но проверю.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[6]: no matching function при инициализации std::tuple
От: niXman Ниоткуда https://github.com/niXman
Дата: 09.01.21 09:58
Оценка:
V>
V>struct optional_type {
V>    optional_type(const optional_type &) = delete; // <------------------ это
V>


да, если copy-ctor и copy-assign сделать default — то компилится умпешно!

спасибо!

зы
но в сообщении об ошибке нет ни слова об этом! фак!
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[6]: no matching function при инициализации std::tuple
От: niXman Ниоткуда https://github.com/niXman
Дата: 09.01.21 10:06
Оценка:
V>
V>struct optional_type {
V>    optional_type(const optional_type &) = delete; // <------------------ это
V>


изначально все kwords были move-only. потом мне пришлось сделать их и копируемыми, но про optional_type я забыл.
больше года тянется этот проект %)

всем спасибо!

зы
этот проект пока удалю. позже выложу чистовой вариант.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Отредактировано 09.01.2021 10:06 niXman . Предыдущая версия .
Re[7]: no matching function при инициализации std::tuple
От: vopl Россия  
Дата: 09.01.21 10:09
Оценка:
Здравствуйте, niXman, Вы писали:

V>>
V>>struct optional_type {
V>>    optional_type(const optional_type &) = delete; // <------------------ это
V>>


X>да, если copy-ctor и copy-assign сделать default — то компилится умпешно!


X>спасибо!


X>зы

X>но в сообщении об ошибке нет ни слова об этом! фак!

Это скрывается за SFINAE у std::tuple конструкторов. Не зря тебе предлагали сделать минимальный воспроизводящий пример .


#include <justsettings/justsettings.hpp>

using namespace justsettings;

struct MySet_t//: ::justsettings::option_base
{
    using value_type    = int;
    using optional_type = ::justsettings::optional_type<value_type>;

    MySet_t(const MySet_t &) = default;
    MySet_t& operator= (const MySet_t &) = default;
    MySet_t() = default;


    optional_type val;
};

int main(int argc, char **argv)
{
    const MySet_t mySet;

    MySet_t mySet2 = mySet; //copy ctor?
    mySet2 = mySet; //copy operator?

    auto set = make_settings(mySet);

    return 0;
}
Re[8]: no matching function при инициализации std::tuple
От: niXman Ниоткуда https://github.com/niXman
Дата: 09.01.21 10:12
Оценка:
V>Это скрывается за SFINAE у std::tuple конструкторов.

фак же! никакой помощи от компилятора в этом случае нет!
при этом в выводе ошибок он перечисляет кучу вариантов и объясняет почему они не подходят! но об этом ни слова!

V>Не зря тебе предлагали сделать минимальный воспроизводящий пример .


та да...

спасибо!
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.