Size: a a a

2020 December 15

DP

Denis Paukaev in pro.cxx
Alex
А можно функцию вида template <class T> void f(T&&); заставить принимать ТОЛЬКО rvalue ссылку? Через enable_if и соответствующий трейт?
Точнее, вопрос, можно ли это сделать НЕ через is_rvalue_reference, и второй вопрос - будет ли это корректно работать через is_rvalue_reference.
а зачем тут is_rvalue_ref? Вроде при передаче сам T будет выводиться как тип без ссылки, а при lvalue с
источник

A

Alex in pro.cxx
мне нужно, чтобы параметры lvalue не могли попадать в эту функцию
источник

DP

Denis Paukaev in pro.cxx
Alex
мне нужно, чтобы параметры lvalue не могли попадать в эту функцию
источник

N

Neargye in pro.cxx
Alex
А можно функцию вида template <class T> void f(T&&); заставить принимать ТОЛЬКО rvalue ссылку? Через enable_if и соответствующий трейт?
Точнее, вопрос, можно ли это сделать НЕ через is_rvalue_reference, и второй вопрос - будет ли это корректно работать через is_rvalue_reference.
источник

AM

Alex McDonald in pro.cxx
Alexander Tulikov
У тебя в вопросе тоже про CUDA ни слова.
Добрый день товарищи пограммисты! Помогите кто чем может, ссылочкой, строкой кода, файлом, добрым словом! Везде гуглил и нигде не нашел инфу по теме "
Анализ технологий параллельных вычислений mpi и cuda на примере алгоритма хеширования sha1", в частности очень нужен  КОД!!11!. Хелпаните плез
источник

A

Alex in pro.cxx
Спасибо!
А для чего терм !std::is_const_v<std::remove_reference_t<T>>?

Я так понимаю, что написать просто <typename T, std::enable_if_t< std::is_rvalue_reference_v<T>>* = nullptr >  не получится, потому что `T здесь int, а не int&&? А если is_rvalue_reference_v<T&&>?
источник

N

Neargye in pro.cxx
Alex
Спасибо!
А для чего терм !std::is_const_v<std::remove_reference_t<T>>?

Я так понимаю, что написать просто <typename T, std::enable_if_t< std::is_rvalue_reference_v<T>>* = nullptr >  не получится, потому что `T здесь int, а не int&&? А если is_rvalue_reference_v<T&&>?
чтобы не принимать const&& ))
источник

A

Alex in pro.cxx
а чем это вредно?
источник

A

Alex in pro.cxx
lvalue же не может передаваться как const&&? Или может?
источник

D

Danya in pro.cxx
Alex
а чем это вредно?
const&& нельзя мувнуть
источник

A

Alex in pro.cxx
понял, спасибо
источник

II

Igor Ivanov in pro.cxx
кажется, мои знания линковки в плюсах слегка заржавели, опять

 $ cat CMakeLists.txt 
cmake_minimum_required(VERSION 3.15)
project(link)
add_executable(test main.cpp foo-test.cpp)
add_library(lib foo-real.cpp)
target_link_libraries(test PRIVATE lib)
$ cat main.cpp
#include "foo.h"
int main() { return foo(); }
$ cat foo.h
#pragma once
int foo();
$ cat foo-real.cpp
int foo() { return 0; }
$ cat foo-test.cpp
int foo() { return 1; }

$ cmake --build b
[5/5] Linking CXX executable test
$ ./b/test; echo $?
1
почему здесь нет бабаха про multiple definitions: foo@real.cpp, foo@test.cpp ?..
источник

D

Danya in pro.cxx
Igor Ivanov
кажется, мои знания линковки в плюсах слегка заржавели, опять

 $ cat CMakeLists.txt 
cmake_minimum_required(VERSION 3.15)
project(link)
add_executable(test main.cpp foo-test.cpp)
add_library(lib foo-real.cpp)
target_link_libraries(test PRIVATE lib)
$ cat main.cpp
#include "foo.h"
int main() { return foo(); }
$ cat foo.h
#pragma once
int foo();
$ cat foo-real.cpp
int foo() { return 0; }
$ cat foo-test.cpp
int foo() { return 1; }

$ cmake --build b
[5/5] Linking CXX executable test
$ ./b/test; echo $?
1
почему здесь нет бабаха про multiple definitions: foo@real.cpp, foo@test.cpp ?..
Потому что UB?
источник

AT

Alexander Tulikov in pro.cxx
Igor Ivanov
кажется, мои знания линковки в плюсах слегка заржавели, опять

 $ cat CMakeLists.txt 
cmake_minimum_required(VERSION 3.15)
project(link)
add_executable(test main.cpp foo-test.cpp)
add_library(lib foo-real.cpp)
target_link_libraries(test PRIVATE lib)
$ cat main.cpp
#include "foo.h"
int main() { return foo(); }
$ cat foo.h
#pragma once
int foo();
$ cat foo-real.cpp
int foo() { return 0; }
$ cat foo-test.cpp
int foo() { return 1; }

$ cmake --build b
[5/5] Linking CXX executable test
$ ./b/test; echo $?
1
почему здесь нет бабаха про multiple definitions: foo@real.cpp, foo@test.cpp ?..
ODR проверяет компилятор, линкеру на это плевать, он берёт первый найденный символ.
источник

ПК

Побитый Кирпич... in pro.cxx
Igor Ivanov
кажется, мои знания линковки в плюсах слегка заржавели, опять

 $ cat CMakeLists.txt 
cmake_minimum_required(VERSION 3.15)
project(link)
add_executable(test main.cpp foo-test.cpp)
add_library(lib foo-real.cpp)
target_link_libraries(test PRIVATE lib)
$ cat main.cpp
#include "foo.h"
int main() { return foo(); }
$ cat foo.h
#pragma once
int foo();
$ cat foo-real.cpp
int foo() { return 0; }
$ cat foo-test.cpp
int foo() { return 1; }

$ cmake --build b
[5/5] Linking CXX executable test
$ ./b/test; echo $?
1
почему здесь нет бабаха про multiple definitions: foo@real.cpp, foo@test.cpp ?..
multiple definitions более менее детектится на винде линкером msvc, на линуксе он то ли не детектит, то ли не всегда
источник

II

Igor Ivanov in pro.cxx
Alexander Tulikov
ODR проверяет компилятор, линкеру на это плевать, он берёт первый найденный символ.
и всё бы ничего, но
add_executable(test
 main.cpp
 foo-test.cpp
 foo-real.cpp
)
$ cmake --build b
[1/1] Linking CXX executable test
FAILED: test
: && /usr/bin/clang++   CMakeFiles/test.dir/main.cpp.o CMakeFiles/test.dir/foo-test.cpp.o CMakeFiles/test.dir/foo-real.cpp.o -o test   && :
/usr/bin/ld: CMakeFiles/test.dir/foo-real.cpp.o: in function `foo()':
foo-real.cpp:(.text+0x0): multiple definition of `foo()'; CMakeFiles/test.dir/foo-test.cpp.o:foo-test.cpp:(.text+0x0): first defined here
источник

AF

Aidar Fattakhov in pro.cxx
Igor Ivanov
кажется, мои знания линковки в плюсах слегка заржавели, опять

 $ cat CMakeLists.txt 
cmake_minimum_required(VERSION 3.15)
project(link)
add_executable(test main.cpp foo-test.cpp)
add_library(lib foo-real.cpp)
target_link_libraries(test PRIVATE lib)
$ cat main.cpp
#include "foo.h"
int main() { return foo(); }
$ cat foo.h
#pragma once
int foo();
$ cat foo-real.cpp
int foo() { return 0; }
$ cat foo-test.cpp
int foo() { return 1; }

$ cmake --build b
[5/5] Linking CXX executable test
$ ./b/test; echo $?
1
почему здесь нет бабаха про multiple definitions: foo@real.cpp, foo@test.cpp ?..
Ну ты сделал какой-то всратый аналог инкрементальной линковки яполагаю
источник

AF

Aidar Fattakhov in pro.cxx
Че такое lib?
источник

AF

Aidar Fattakhov in pro.cxx
Это сошка или ашка?
источник

EE

Ender Eyre in pro.cxx
это либка.
источник