Compilation issue with custom state type with clang only
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
Direzione di ricerca
Inizia con il reproducer Godbolt collegato e confronta clang++ con i compilatori che lo accettano. Esamina il percorso di inclusione di boost/numeric/odeint.hpp e l’uso di vector_space_algebra con std::pair; il lavoro è completato quando il programma mostrato compila con clang++ senza spostare le definizioni degli operatori prima dell’inclusione di odeint.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
In the code below, I am working with a custom state-type (a std::pair in this case). The code compiles with g++, icc, msvc. With clang however, compilation fails. In order to get it to build successfully, I apparently need to define operator+() and operator*() for the state type before including the odeint header. Link to godbolt: https://godbolt.org/z/6eavzdxbf
#include <cstdlib>
#include <utility>
#include <boost/numeric/odeint.hpp> // if included here, compilations fails with clang++
using state_type = std::pair<double, double>;
using deriv_type = state_type;
using time_type = double;
state_type operator+(state_type a, state_type const& b);
state_type operator*(state_type a, time_type b);
state_type operator*(time_type b, state_type a);
//~ #include <boost/numeric/odeint.hpp> // if included here, no error!
state_type operator+(state_type a, state_type const& b) {
a.first += b.first;
a.second += b.second;
return a;
}
state_type operator*(state_type a, time_type b) {
a.first *= b;
a.second *= b;
return a;
}
state_type operator*(time_type b, state_type a) {
return a * b;
}
void harmonic_oscillator(const state_type& x, deriv_type& dxdt, time_type) {
static auto constexpr gam = 0.1;
dxdt.first = x.second;
dxdt.second = -x.first - gam*x.second;
}
namespace bno = boost::numeric::odeint;
using stepper_type = bno::runge_kutta_dopri5<state_type, double, deriv_type, time_type, bno::vector_space_algebra>;
int main() {
state_type x0{1.0, 0.0};
// just to see if the operators work...
x0 * 1.;
2. * x0;
x0 + x0;
stepper_type stepper;
time_type const dt = 0.005;
for (time_type t = 0; t < 10; t += dt) {
stepper.do_step(harmonic_oscillator, x0, t, dt);
std::cout << t << '\t' << x0.first << '\t' << x0.second << '\n';
}
return EXIT_SUCCESS;
}
- Lingua principale
- C++
- Stelle
- 55
- Fork
- 59
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di boostorg/odeint
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 43/100
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
Tutte le issue di boostorg/odeint
Issue simili
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
cp-algorithms/cp-algorithms#1715 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
Icinga/icinga2#11058 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
status:needs-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
PX4/PX4-Autopilot#28924 ·
I maintainer di solito rispondono entro 1 giorno
-
component: split-view platform: windows
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
zen-browser/desktop#15616 · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno