Byla vydána (𝕏) nová verze 24.7 open source firewallové a routovací platformy OPNsense (Wikipedie). Jedná se o fork pfSense postavený na FreeBSD. Kódový název OPNsense 24.7 je Thriving Tiger. Přehled novinek v příspěvku na fóru.
Binarly REsearch upozorňuje na bezpečnostní problém PKFail (YouTube) v ekosystému UEFI. Stovky modelů zařízení používají pro Secure Boot testovací Platform Key vygenerovaný American Megatrends International (AMI) a jeho privátní část byla při úniku dat prozrazena. Do milionů zařízení (seznam v pdf) po celém světě tak útočníci mohou do Secure Bootu vložit podepsaný malware. Otestovat firmware si lze na stránce pk.fail. Ukázka PoC na Linuxu na Windows na YouTube.
Mobilní operační systém /e/OS (Wikipedie) založený na Androidu / LineageOS, ale bez aplikací a služeb od Googlu, byl vydán ve verzi 2.2 (Mastodon, 𝕏). Přehled novinek na GitLabu. Vypíchnuta je rodičovská kontrola.
Společnost OpenAI představila vyhledávač SearchGPT propojující OpenAI modely umělé inteligence a informace z webů v reálném čase. Zatím jako prototyp pro vybrané uživatele. Zapsat se lze do pořadníku čekatelů.
Distribuce Linux Mint 22 „Wilma“ byla vydána. Je založená na Ubuntu 24.04 LTS, ale s desktopovým prostředím Cinnamon (aktuálně verze 6.2), příp. MATE nebo Xfce, balíkem aplikací XApp, integrací balíčků Flatpak a dalšími změnami. Více v přehledu novinek a poznámkách k vydání.
Příspěvek na blogu Truffle Security: Kdokoli může přistupovat ke smazaným a privátním repozitářům na GitHubu.
Byla vydána nová verze 14 integrovaného vývojového prostředí (IDE) Qt Creator. Podrobný přehled novinek v cgitu. Vypíchnout lze podporu rozšíření v Lua.
Byla vydána verze 1.80.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.
Apple oznámil, že v beta verzi spustil své Apple Maps na webu. Podporován je také webový prohlížeč Chrome. Ne však na Linuxu.
Portál Stack Overflow po roce opět vyzpovídal své uživatele, jedná se především o vývojáře softwaru, a zveřejnil detailní výsledky průzkumu. Průzkumu se letos zúčastnilo více než 65 tisíc vývojářů. Z Česka jich bylo 710. Ze Slovenska 246.
string_t
a string_traits
do vlastniho jmenneho prostoru. Pritom a.cpp jde zkompilovat (gcc) bez problemu, ale b.cpp skonci s chybou:
/usr/lib/gcc/3.4.4/include/c++/bits/stl_function.h: In member function `bool std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = xxx::string_t]': b.cpp:54: instantiated from here /usr/lib/gcc/3.4.4/include/c++/bits/stl_function.h:227: error: no match for 'operator<' in '__x < __y'Zajimavy je ze yyy::less funguje ale std::less ne. Pritom jsem yyy::less vytvoril jako kopii std::less... a.cpp:
#include <boost/mpl/bool.hpp> #include <boost/utility/enable_if.hpp> #include <functional> namespace yyy { template<typename _Tp> struct less : public std::binary_function<_Tp, _Tp, bool> { bool operator()(const _Tp& __x, const _Tp& __y) const { return __x < __y; } }; } struct string_t { }; template <typename string_type_> struct string_traits; template <> struct string_traits<string_t> { typedef string_t string_type; }; template <typename A, typename B> struct both_exist: public boost::mpl::true_ {}; template <typename T, typename U> inline typename boost::enable_if < both_exist < typename string_traits<T>::string_type, typename string_traits<U>::string_type >, bool >::type operator < (const T &str1, const U &str2) { } int main() { yyy::less<string_t> cmp; std::less<string_t> cmp1; string_t a; string_t b; cmp(a, b); cmp1(a, b); }b.cpp:
#include <boost/mpl/bool.hpp> #include <boost/utility/enable_if.hpp> #include <functional> namespace yyy { template<typename _Tp> struct less : public std::binary_function<_Tp, _Tp, bool> { bool operator()(const _Tp& __x, const _Tp& __y) const { return __x < __y; } }; } namespace xxx { struct string_t { }; template <typename string_type_> struct string_traits; template <> struct string_traits<string_t> { typedef string_t string_type; }; } template <typename A, typename B> struct both_exist: public boost::mpl::true_ {}; template <typename T, typename U> inline typename boost::enable_if < both_exist < typename xxx::string_traits<T>::string_type, typename xxx::string_traits<U>::string_type >, bool >::type operator < (const T &str1, const U &str2) { } int main() { yyy::less<xxx::string_t> cmp; std::less<xxx::string_t> cmp1; xxx::string_t a; xxx::string_t b; cmp(a, b); cmp1(a, b); }
Řešení dotazu:
namespace yyy { class x; inline bool operator < (x const &a, x const &b) { } }a dela me to stejnou chybu i s yyy::less. Takze zrejme ten muj "operator <" neni pristupny v zadnym namespace kde uz existuje jiny "operator <". Nejak to nechapu... chapal bych kdyby to muj operator prekrylo vzdycky, ale proc to dela jenom kdyz je string_t a string_traits v xxx ??
operator <
presunu do xxx
tak to funguje.
Problem je (see http://en.wikipedia.org/wiki/Argument_dependent_name_lookup), ze napr pri pouziti yyy::less
, gcc nejdriv najde yyy::operator<
, potom prohleda namespacy asociovany s argumentama a najde xxx::operator<
, a root namespace uz neprohledava...
Tak nevim. Je tohle vlastnost nebo chyba ? A je teda mozny udelat operator <
, ktery by fungoval na vsechny string tridy co maji string_traits
, at uz jsou v jakymkoli jmennym prostoru ?
Co by "univerzalni" operator<
mel delat? To je problem kazde implementace stringu, aby mela i svoji definici porovnani, ktera bude ve stejnem namespacu, takze vsechno bude fungovat, jak ma.
Tiskni
Sdílej: