Enrique Nieloud | 26 Aug 16:33 2015
Picon

[cppba] ​ Failed to specialize function template 'unknown-type std::invoke(_Callable &&,_Types &&...)

Gente, tengo un cacho de código que compila sin problemas en llvm/clang, pero en Visual Studio me tira un error que la verdad no logro solucionar:
¿alguna idea?

//Header
class StockBitmaps
{
 ...
    void f(sqlite3x::sqlite3_connection& con, int id);
 ...
private:
    void storeBitmap(sqlite3x::sqlite3_connection& con, int stockBitmapId,
      bool update, pair<UniqueID, unique_ptr<ImageRGBA>>& element);
 ...
    map<UniqueID, unique_ptr<ImageRGBA>, LowerThanUniqueID> m_data;
}

// Implementation:

using namespace std::placeholders;
...
void StockBitmaps::f(sqlite3x::sqlite3_connection& con, int id)
{
...
for_each(
        m_data.begin(),
        m_data.end(),
        bind(&StockBitmaps::storeBitmap, this, std::ref(con), id, update, _1)
    ); // <---- Línea 247
....
}



El compilador me tira:

1>  StockBitmaps.cpp
1>c:\program files\microsoft visual studio 14.0\vc\include\type_traits(1501): error C2893: Failed to specialize function template 'unknown-type std::invoke(_Callable &&,_Types &&...)'
1>  c:\program files\microsoft visual studio 14.0\vc\include\type_traits(1501): note: With the following template arguments:
1>  c:\program files\microsoft visual studio 14.0\vc\include\type_traits(1501): note: '_Callable=void (__thiscall gtr::StockBitmaps::* &)(sqlite3x::sqlite3_connection &,int,bool,std::pair<gtr::UniqueID,std::unique_ptr<gtr::ImageRGBA,std::default_delete<_Ty>>> &)'
1>  c:\program files\microsoft visual studio 14.0\vc\include\type_traits(1501): note: '_Types={gtr::StockBitmaps *&, sqlite3x::sqlite3_connection &, int &, bool &, std::pair<const _Kty,_Ty> &}'
1>  c:\program files\microsoft visual studio 14.0\vc\include\functional(794): note: see reference to function template instantiation '_Rx std::_Invoke_ret<std::_Unforced,_Cv_FD&,_Cv_TiD&,sqlite3x::sqlite3_connection&,int&,bool&,std::pair<const _Kty,_Ty>&>(std::_Forced<_Rx,false>,_Cv_FD &,_Cv_TiD &,sqlite3x::sqlite3_connection &,int &,bool &,std::pair<const _Kty,_Ty> &)' being compiled
1>          with
1>          [
1>              _Rx=std::_Unforced,
1>              _Cv_FD=void (__thiscall gtr::StockBitmaps::* )(sqlite3x::sqlite3_connection &,int,bool,std::pair<gtr::UniqueID,std::unique_ptr<gtr::ImageRGBA,std::default_delete<gtr::ImageRGBA>>> &),
1>              _Cv_TiD=gtr::StockBitmaps *,
1>              _Kty=gtr::UniqueID,
1>              _Ty=std::unique_ptr<gtr::ImageRGBA,std::default_delete<gtr::ImageRGBA>>
1>          ]
1>  c:\program files\microsoft visual studio 14.0\vc\include\functional(849): note: see reference to function template instantiation '_Rx std::_Call_binder<std::_Unforced,0,1,2,3,4,_Ty1,_Ty2,std::tuple<std::pair<const _Kty,_Ty> &>>(std::_Forced<_Rx,false>,std::integer_sequence<unsigned int,0,1,2,3,4>,_Cv_FD &,_Cv_tuple_TiD &,_Untuple &&)' being compiled
1>          with
1>          [
1>              _Rx=std::_Unforced,
1>              _Ty1=void (__thiscall gtr::StockBitmaps::* )(sqlite3x::sqlite3_connection &,int,bool,std::pair<gtr::UniqueID,std::unique_ptr<gtr::ImageRGBA,std::default_delete<gtr::ImageRGBA>>> &),
1>              _Ty2=std::tuple<gtr::StockBitmaps *,std::reference_wrapper<sqlite3x::sqlite3_connection>,int,bool,std::_Ph<1>>,
1>              _Kty=gtr::UniqueID,
1>              _Ty=std::unique_ptr<gtr::ImageRGBA,std::default_delete<gtr::ImageRGBA>>,
1>              _Cv_FD=void (__thiscall gtr::StockBitmaps::* )(sqlite3x::sqlite3_connection &,int,bool,std::pair<gtr::UniqueID,std::unique_ptr<gtr::ImageRGBA,std::default_delete<gtr::ImageRGBA>>> &),
1>              _Cv_tuple_TiD=std::tuple<gtr::StockBitmaps *,std::reference_wrapper<sqlite3x::sqlite3_connection>,int,bool,std::_Ph<1>>,
1>              _Untuple=std::tuple<std::pair<const gtr::UniqueID,std::unique_ptr<gtr::ImageRGBA,std::default_delete<gtr::ImageRGBA>>> &>
1>          ]
1>  c:\program files\microsoft visual studio 14.0\vc\include\algorithm(24): note: see reference to function template instantiation '_Rx std::_Binder<std::_Unforced,void (__thiscall gtr::StockBitmaps::* )(sqlite3x::sqlite3_connection &,int,bool,std::pair<gtr::UniqueID,std::unique_ptr<gtr::ImageRGBA,std::default_delete<_Ty>>> &),gtr::StockBitmaps *const ,std::reference_wrapper<sqlite3x::sqlite3_connection>,int &,bool &,const std::_Ph<1> &>::operator ()<std::pair<const _Kty,std::unique_ptr<_Ty,std::default_delete<_Ty>>>&>(std::pair<const _Kty,std::unique_ptr<_Ty,std::default_delete<_Ty>>> &)' being compiled
1>          with
1>          [
1>              _Rx=std::_Unforced,
1>              _Ty=gtr::ImageRGBA,
1>              _Kty=gtr::UniqueID
1>          ]
1>  c:\program files\microsoft visual studio 14.0\vc\include\algorithm(24): note: see reference to function template instantiation '_Rx std::_Binder<std::_Unforced,void (__thiscall gtr::StockBitmaps::* )(sqlite3x::sqlite3_connection &,int,bool,std::pair<gtr::UniqueID,std::unique_ptr<gtr::ImageRGBA,std::default_delete<_Ty>>> &),gtr::StockBitmaps *const ,std::reference_wrapper<sqlite3x::sqlite3_connection>,int &,bool &,const std::_Ph<1> &>::operator ()<std::pair<const _Kty,std::unique_ptr<_Ty,std::default_delete<_Ty>>>&>(std::pair<const _Kty,std::unique_ptr<_Ty,std::default_delete<_Ty>>> &)' being compiled
1>          with
1>          [
1>              _Rx=std::_Unforced,
1>              _Ty=gtr::ImageRGBA,
1>              _Kty=gtr::UniqueID
1>          ]
1>  c:\program files\microsoft visual studio 14.0\vc\include\algorithm(32): note: see reference to function template instantiation 'void std::_For_each<std::_Tree_unchecked_iterator<_Mytree>,_Fn1>(_InIt,_InIt,_Fn1 &)' being compiled
1>          with
1>          [
1>              _Mytree=std::_Tree_val<std::_Tree_simple_types<std::pair<const gtr::UniqueID,std::unique_ptr<gtr::ImageRGBA,std::default_delete<gtr::ImageRGBA>>>>>,
1>              _Fn1=std::_Binder<std::_Unforced,void (__thiscall gtr::StockBitmaps::* )(sqlite3x::sqlite3_connection &,int,bool,std::pair<gtr::UniqueID,std::unique_ptr<gtr::ImageRGBA,std::default_delete<gtr::ImageRGBA>>> &),gtr::StockBitmaps *const ,std::reference_wrapper<sqlite3x::sqlite3_connection>,int &,bool &,const std::_Ph<1> &>,
1>              _InIt=std::_Tree_unchecked_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<const gtr::UniqueID,std::unique_ptr<gtr::ImageRGBA,std::default_delete<gtr::ImageRGBA>>>>>>
1>          ]
1>  c:\users\enieloud\devel\wizardpaint\cppsrc\objects\stockbitmaps.cpp(247): note: see reference to function template instantiation '_Fn1 std::for_each<std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<const _Kty,_Ty>>>>,std::_Binder<std::_Unforced,void (__thiscall gtr::StockBitmaps::* )(sqlite3x::sqlite3_connection &,int,bool,std::pair<gtr::UniqueID,std::unique_ptr<gtr::ImageRGBA,std::default_delete<gtr::ImageRGBA>>> &),gtr::StockBitmaps *const ,std::reference_wrapper<sqlite3x::sqlite3_connection>,int &,bool &,const std::_Ph<1> &>>(_InIt,_InIt,_Fn1)' being compiled
1>          with
1>          [
1>              _Fn1=std::_Binder<std::_Unforced,void (__thiscall gtr::StockBitmaps::* )(sqlite3x::sqlite3_connection &,int,bool,std::pair<gtr::UniqueID,std::unique_ptr<gtr::ImageRGBA,std::default_delete<gtr::ImageRGBA>>> &),gtr::StockBitmaps *const ,std::reference_wrapper<sqlite3x::sqlite3_connection>,int &,bool &,const std::_Ph<1> &>,
1>              _Kty=gtr::UniqueID,
1>              _Ty=std::unique_ptr<gtr::ImageRGBA,std::default_delete<gtr::ImageRGBA>>,
1>              _InIt=std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<const gtr::UniqueID,std::unique_ptr<gtr::ImageRGBA,std::default_delete<gtr::ImageRGBA>>>>>>
1>          ]


--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Enrique Nieloud | 18 Aug 23:45 2015
Picon

std optional

Gente,

Tiro acá a ver si me pueden ayudar:

Ya hablamos acá del boost optional cuyo desarrollo original fue de Fernando Cacciola y de que aparentemente había sido aceptado en el standard, pero luego de varias idas y vueltas parece que surgieron detalles de implementación, por lo que quedó dentro de algo que en el std llamaron "experimental". (Fernando capaz sabe mejor lo que pasó).

Estoy buscando un equivalente a boost::optional que compile en VS2013.

Probé con:

#include <experimental/optional>
#include <experimental/optional.hpp>

sin éxito.

Probé buscándolas a mano, pero tampoco.

Este:

https://github.com/akrzemi1/Optional/

Compila bien en Clang, pero necesito uno que también compile bajo VS2013.

Ah!, y que no dependa de boost.

Supuestamente a este flaco:

http://stackoverflow.com/questions/31474434/no-optional-in-ms-visual-studio-2013-what-to-do

Le dieron una respuesta válida, sin embargo ninguna de las referencias me llevó a nada.

¿alguien sabe algo?

slds,

- Enrique

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Fernando Pelliccioni | 18 Aug 20:48 2015
Picon

[cppba] (OFF-TOPIC) Doctorado en Ciencias de la Computación

Muchachos,

Perdonen el off-topic.

¿Alguno conoce alguna Universidad (respetable) que dicte el Doctorado en CS pero que ofrezca cursos a distancia? 
Tanto nacional como de afuera.

Acá en Buenos Aires y cercanías, la UBA no tiene nada a distancia, al menos para CS.
La Universidad de La Plata tiene 2 o 3 cursos a distancia, el resto, tenés que tomarlos presencial y exige una cantidad de horas que no es compatible para alguien que trabaja y tiene familia (además del viaje, no me queda muy cerca).

Muchas gracias y disculpas nuevamente.
Saludos,
Fernando.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
RFOG | 13 Aug 17:52 2015
Picon

Recibir respuesta de un mensaje broadcast con boost::asio

Hola, chicos.

Llevo todo el día negro con esto y no consigo sacarle punta.

Envío un mensaje de broadcast desde un interfaz de red y veo la respuesta del dispositivo con el wireshark, pero no soy capaz de cogerla con mi código.

La interfaz local de red es la 192.168.0.100, y el datagrama se envía con el código:

  bool UdpClient::SendBroadcast(std::pair<const byte*const, int> messge,std::wstring addr,unsigned short port)
  {
   boost::system::error_code error;
   m_socket.open(udp::v4(), error);
   m_socket.set_option(udp::socket::reuse_address(true));
   m_socket.set_option(boost::asio::socket_base::broadcast(true));
   udp::endpoint senderEndpoint(boost::asio::ip::address_v4::broadcast(), port);

   auto ip = boost::asio::ip::address_v4::from_string(StringHelper::Ws2s(addr));
   udp::endpoint endpoint(ip, 0);
   m_socket.bind(endpoint);
   m_socket.send_to(boost::asio::buffer(messge.first, messge.second), senderEndpoint);
   return true;
  }

Evidentemente es código al que le he cortado todo el control de errores, etc.

Ese código envía el datagrama sin problemas, y el dispositivo conectado responde porque lo veo en wireshark.

El problema viene cuando miro la respuesta. No he encontrado código que me la recoja.

Algo tan sencillo como esto debería funcionar:

   udp::endpoint sender;

   udp::socket socket(m_ioService, udp::endpoint(udp::v4(), 3330));
   socket.receive_from(boost::asio::buffer(p, max), sender);

Pero el código se queda parado en receive_from sin recibir nada. Incluso cuando max se convierte en un valor trivial como 1.

Versiones más elaboradas como

   m_socket.open(udp::v4(), error);
   udp::endpoint endpoint;
   m_socket.set_option(boost::asio::socket_base::broadcast(true));
   udp::endpoint listenEndpoint(boost::asio::ip::address_v4::any(), 3330);
   m_socket.bind(listenEndpoint);
   m_socket.receive_from(boost::asio::buffer(p, 10), endpoint);

Tampoco funcionan, y las asíncronas menos (no se me olvida de llamar a io_serivce.run()).

La captura de wireshark es

131 76.290484000 192.168.0.100 255.255.255.255 UDP 47 Source port: 51388  Destination port: 3330
132 76.302457000 192.168.0.213 255.255.255.255 UDP 126 Source port: 3330  Destination port: 3330

No sé, ¿se os ocurre alguna solución al tema?

Gracias de antemano.


--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Daniel Gutson | 12 Aug 23:33 2015
Picon

Fwd: First successful container with nontrivial constructor in ROM

Estoy muy muy pero muy entusiasmado con esto y por eso se los comparto.

   Daniel.

---------- Forwarded message ----------
From: Daniel Gutson <daniel.gutson@...>
Date: Wed, Aug 12, 2015 at 6:32 PM
Subject: Fwd: First successful container with nontrivial constructor in ROM
To: daniel.gutson@...

---------- Forwarded message ----------
From: Daniel Gutson <daniel.gutson@...>
Date: Wed, Aug 12, 2015 at 6:31 PM
Subject: First successful container with nontrivial constructor in ROM
To: "embedded@..."
<embedded@...>, Richard Smith
<richard@...>, Bjarne Stroustrup <bjarne@...>
Cc: Andres Tiraboschi <andres.tiraboschi@...>

Hi guys,

   after some hard work tweaking gcc and plugin engineering, we are
pleased to tell you that we have a
working prototype capable of placing a "static string" object in ROM.
It does "allocate" read only memory and
process an incoming C-string during construction.
This "static string" is a C++ class with a subset of the functionality
of std::string.
The next step is to use this compiler infrastructure to implement a
balanced tree and a hash (where tree
balancing and array sizing and hashing occurs during construction).

[[gnu::noinline]] constexpr char* myCopy(const char* s, const unsigned int size)
{
    char* newArray = static_alloc(size);
    int i = 0;
    for(; i < size; ++i)
        newArray[i] = toUpper(s[i]);
    return newArray;
}

class CString
{
    const unsigned int size;
    const char* const content;
public:
    constexpr CString(const char* s): size(myStrlen(s)),
content(myCopy(s, myStrlen(s) + 1u))
    {
    }
    friend std::ostream& operator<< (std::ostream& os, const CString& cs)
    {
        os << cs.content;
        return os;
    }
};

const CString mystring("Hello c++ guys!");

int main(void)
{
    std::cout << mystring << std::endl;
}

Then:

laburo <at> cyrus:~/Downloads$ objdump -xC a.out |grep GLOBAL_ARRAY_0
00000000004009e0 g     O .rodata 0000000000000010              GLOBAL_ARRAY_0

and

laburo <at> cyrus:~/Downloads$ objdump -xC a.out |grep mystring
00000000004009f0 l     O .rodata 0000000000000010              mystring

(the GLOBAL_ARRAY_n is the array the compiler generates in compile
time; n is an incremental number).

Side notes: toUpper and myStrlen are trivial constexpr implementations
omitted here.

We tested the hypothesis that: a static_alloc() ) function plus the ability to
modify the returned memory in a constexpr constructor are sufficient
to place a container in ROM.

I will let you know once we progress with this. Patches to gcc will be
sent soon.

   Daniel.

ps: Andres Tiraboschi has done the implementation in gcc and plugins.

--

Daniel F. Gutson
Chief Engineering Officer, SPD

San Lorenzo 47, 3rd Floor, Office 5
Córdoba, Argentina

Phone:   +54 351 4217888 / +54 351 4218211
Skype:    dgutson
LinkedIn: http://ar.linkedin.com/in/danielgutson

--

Daniel F. Gutson
Chief Engineering Officer, SPD

San Lorenzo 47, 3rd Floor, Office 5
Córdoba, Argentina

Phone:   +54 351 4217888 / +54 351 4218211
Skype:    dgutson
LinkedIn: http://ar.linkedin.com/in/danielgutson

-- 
Who’s got the sweetest disposition?
One guess, that’s who?
Who’d never, ever start an argument?
Who never shows a bit of temperament?
Who's never wrong but always right?
Who'd never dream of starting a fight?
Who get stuck with all the bad luck?

-- 
--

-- 
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error. 
En caso de duda visita "http://groups.google.com/group/cppba"
--- 
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe <at> googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.

dgutson . | 5 Aug 23:13 2015
Picon

[cppba] espám

(disculpen, tuve que hacer esto)

tinyurl.com/showmethecode

No responder este mail ni hacerme consultas. Está todo ahí.

   Daniel.

-- 
Who’s got the sweetest disposition?
One guess, that’s who?
Who’d never, ever start an argument?
Who never shows a bit of temperament?
Who's never wrong but always right?
Who'd never dream of starting a fight?
Who get stuck with all the bad luck?

-- 
--

-- 
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error. 
En caso de duda visita "http://groups.google.com/group/cppba"
--- 
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe <at> googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.

Agustin Perez Paladini | 24 Jul 18:36 2015
Picon

mignw 4.8.1 + variadic tempalte args

Buenas, estoy teniendo un problema y no entiendo que esta pasando exactamente...
Basicamente el problema es que un objeto desaparece completamente del codigo dependiendo de un argumento en la construccion de un objeto temporal sin tirar ningun warning ni error.
El codigo lo compile en win 8.1 con: g++ -o test test.cpp  -std=c++11 -Wall

El codigo:

#include <iostream>
#include <string>
#include <functional>
#include <tuple>


struct A {
A(int a = 0) {std::cout << "A::A()\n";}
A(const A&) {std::cout << "A::A(const A&)\n";}
A(A&&) {std::cout << "A::A(A&&)\n";}
};

struct B {
B(int a = 0) {std::cout << "B::B()\n";}
B(const B&) {std::cout << "B::B(const B&)\n";}
B(B&&) {std::cout << "B::B(B&&)\n";}

};


template<typename... Types>
struct Test {
    typedef std::tuple<Types...> vtype;
    vtype elements;
    
    Test(const Types&... args) : elements(std::make_tuple(args...))
    {   
        std::cout << "1 sizeof: " << sizeof...(args) << "\n";                
    }
    
    Test(Types&&... args) : elements(std::make_tuple(args...))
    {   
        std::cout << "2 sizeof: " << sizeof...(args) << "\n";  
    }
    Test() = delete;
    
    ~Test() {std::cout << "~Test()\n";}
};

int main(void)
{
    std::cout << "\nstart\n";    
    Test<A, B> test(A(1), B());
    std::cout << "\nend\n";
    return 0;
}

eso compila bien perfecto sin errores ni warnings y el output de eso es:

start
B::B()
A::A()
B::B(const B&)
A::A(const A&)
2 sizeof: 2

end
~Test()


Ahora si cambiamos esta linea:

Test<A, B> test(A(1), B());

por:

Test<A, B> test(A(), B());

compila tambien sin errores ni warnings pero el output es

start

end

Viendo el assambly basicamente no existe el objeto test (y el compiler ni si quiera tira un error ni un warning ni nada).. Asumo que esta relacionado con "SFINAE" pero capaz que no...

alguna idea?

Muchas gracias de antemano,
Salu!

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
RFOG | 22 Jul 13:10 2015
Picon

Variables de clase en std::thread

Esta no es mi semana, leches.

Os cuento.

Creo un thread de la siguiente manera:

m_thread = new std::thread(&EngineBase::ThreadFunction, this);


Hasta donde yo llego, al pasar this estoy pasando su propio objeto, por lo que el ThreadFunction es el de la propia instancia de this.

Sin embargo, las variables de clase (como por ejemplo un atomic<bool> que tengo para detener el thread) son una copia (lo sé porque miro la dirección de memoria).

Es decir, que thread copia mi objeto en lugar de usarlo.

Lo entendería si hiciera

m_thread = new std::thread(&EngineBase::ThreadFunction, *this);


¿En qué me estoy equivocando?

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Fernando Cacciola | 21 Jul 23:03 2015
Picon

Aguante stutrup :)

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
RFOG | 20 Jul 14:12 2015
Picon

Paso variable de argumentos

Lo más seguro que es una chorrada, pero llevo un buen rato y no consigo sacarle punta.

Tengo un método que recibe un número variable de argumentos, "a la C":

void Logger::Warning(std::wstring str, ...)
{
 va_list ap;
 va_start(ap, str);
 AppendImpl(LoggerLevels::Warning, str, ap);
 va_end(ap);
}

La firma de AppendImpl es

 void AppendImpl(LoggerLevels::Levels level, std::wstring str,va_list arglist);

Dentro de ella llamo a wvsprintf, pero la cadena formateada es basura.

Es decir, necesito pasar un número variable de argumentos con dos niveles de anidación... Yo no los proceso para nada, el trabajo se lo dejo a wvsprintf.

Con un nivel de anidación, es decir a la altura de Warning, sí que funciona, pero con dos no.

¿Cómo se hace?

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Daniel Uranga | 7 Jul 06:06 2015
Picon

[en C puro] *(char**) vs (char*)

tengo el siguiente código:

if( *(char**)vm->start == jit_handle_trap )

pregunto para estar seguro, sabiendo que vm->start es un puntero a
algo, el código anterior no deberia ser equivalente a:

if( (char*)vm->start == jit_handle_trap )

?

El código original me tira "warning: dereferencing type-punned pointer
will break strict-aliasing rules", que creo es innecesario si todos
los punteros tienen el mismo tamaño, o no?

-- 
--

-- 
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error. 
En caso de duda visita "http://groups.google.com/group/cppba"
--- 
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe <at> googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.


Gmane