Re: Make copyObject work in C++
| От | David Geier |
|---|---|
| Тема | Re: Make copyObject work in C++ |
| Дата | |
| Msg-id | fad7228e-a920-4ebb-973c-a48cc5066b71@gmail.com обсуждение исходный текст |
| Ответ на | Re: Make copyObject work in C++ (Peter Eisentraut <peter@eisentraut.org>) |
| Ответы |
Re: Make copyObject work in C++
|
| Список | pgsql-hackers |
On 08.12.2025 08:57, Peter Eisentraut wrote: > On 05.12.25 15:46, Jelte Fennema-Nio wrote: >> Calling copyObject fails in C++ with an error like in most setups: >> >> error: use of undeclared identifier 'typeof'; did you mean 'typeid' >> >> This is due to the C compiler supporting used to compile postgres >> supporting typeof, but that function actually not being present in the >> C++ compiler. This fixes that by using decltype instead of typeof when >> including the header in C++. >> >> Realized because of Thomas' not about how much of our headers should >> work in C++, and remembering I hit this specific problem myself. >> >> Another approach would be to force the value of HAVE_TYPEOF to 0 if >> __cplusplus. > > In the long run, I would like to change copyObject() to use > typeof_unqual instead, because that handles qualifiers more correctly. > (Currently, copyObject() of a const-qualified pointer results in a > const-qualified pointer, which is nonsensical because the reason you > made the copy is that you can modify it.) See attached patch for an > example. Does C++ have something that is semantically similar to that? Since C++11 there's std::remove_const which can be used as std::remove_const<decltype(type)>::type. I'm not aware of anything pre C++11, except for rolling your own variant of std::remove_const via template specialization. -- David Geier
В списке pgsql-hackers по дате отправления: