mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-29 22:20:48 +00:00
Make RPCS3 compile in C++2a mode
This commit is contained in:
parent
e9e8f0c5b7
commit
1a78e0e80c
@ -420,9 +420,13 @@ logs::file_writer::file_writer(const std::string& name)
|
||||
m_fout.open(log_name, fs::rewrite);
|
||||
|
||||
// Compressed log, make it inaccessible (foolproof)
|
||||
if (!m_fout2.open(log_name + ".gz", fs::rewrite + fs::unread) || deflateInit2(&m_zs, 9, Z_DEFLATED, 16 + 15, 9, Z_DEFAULT_STRATEGY) != Z_OK)
|
||||
if (m_fout2.open(log_name + ".gz", fs::rewrite + fs::unread))
|
||||
{
|
||||
m_fout2.close();
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wold-style-cast"
|
||||
if (deflateInit2(&m_zs, 9, Z_DEFLATED, 16 + 15, 9, Z_DEFAULT_STRATEGY) != Z_OK)
|
||||
#pragma GCC diagnostic pop
|
||||
m_fout2.close();
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
@ -666,14 +670,14 @@ void logs::file_listener::log(u64 stamp, const logs::message& msg, const std::st
|
||||
// Used character: U+00B7 (Middle Dot)
|
||||
switch (msg.sev)
|
||||
{
|
||||
case level::always: text = u8"·A "; break;
|
||||
case level::fatal: text = u8"·F "; break;
|
||||
case level::error: text = u8"·E "; break;
|
||||
case level::todo: text = u8"·U "; break;
|
||||
case level::success: text = u8"·S "; break;
|
||||
case level::warning: text = u8"·W "; break;
|
||||
case level::notice: text = u8"·! "; break;
|
||||
case level::trace: text = u8"·T "; break;
|
||||
case level::always: text = reinterpret_cast<const char*>(u8"·A "); break;
|
||||
case level::fatal: text = reinterpret_cast<const char*>(u8"·F "); break;
|
||||
case level::error: text = reinterpret_cast<const char*>(u8"·E "); break;
|
||||
case level::todo: text = reinterpret_cast<const char*>(u8"·U "); break;
|
||||
case level::success: text = reinterpret_cast<const char*>(u8"·S "); break;
|
||||
case level::warning: text = reinterpret_cast<const char*>(u8"·W "); break;
|
||||
case level::notice: text = reinterpret_cast<const char*>(u8"·! "); break;
|
||||
case level::trace: text = reinterpret_cast<const char*>(u8"·T "); break;
|
||||
}
|
||||
|
||||
// Print µs timestamp
|
||||
|
@ -68,6 +68,13 @@ namespace logs
|
||||
{
|
||||
}
|
||||
|
||||
private:
|
||||
#if __cpp_char8_t >= 201811
|
||||
using char2 = char8_t;
|
||||
#else
|
||||
using char2 = uchar;
|
||||
#endif
|
||||
|
||||
#define GEN_LOG_METHOD(_sev)\
|
||||
const message msg_##_sev{this, level::_sev};\
|
||||
template <std::size_t N, typename... Args>\
|
||||
@ -78,8 +85,18 @@ namespace logs
|
||||
static constexpr fmt_type_info type_list[sizeof...(Args) + 1]{fmt_type_info::make<fmt_unveil_t<Args>>()...};\
|
||||
msg_##_sev.broadcast(fmt, type_list, u64{fmt_unveil<Args>::get(args)}...);\
|
||||
}\
|
||||
}
|
||||
}\
|
||||
template <std::size_t N, typename... Args>\
|
||||
void _sev(const char2(&fmt)[N], const Args&... args)\
|
||||
{\
|
||||
if (UNLIKELY(level::_sev <= enabled.load(std::memory_order_relaxed)))\
|
||||
{\
|
||||
static constexpr fmt_type_info type_list[sizeof...(Args) + 1]{fmt_type_info::make<fmt_unveil_t<Args>>()...};\
|
||||
msg_##_sev.broadcast(reinterpret_cast<const char*>(+fmt), type_list, u64{fmt_unveil<Args>::get(args)}...);\
|
||||
}\
|
||||
}\
|
||||
|
||||
public:
|
||||
GEN_LOG_METHOD(fatal)
|
||||
GEN_LOG_METHOD(error)
|
||||
GEN_LOG_METHOD(todo)
|
||||
|
@ -8,8 +8,8 @@
|
||||
|
||||
namespace fmt
|
||||
{
|
||||
template <typename... Args>
|
||||
static std::string format(const char*, const Args&...);
|
||||
template <typename CharT, std::size_t N, typename... Args>
|
||||
static std::string format(const CharT(&)[N], const Args&...);
|
||||
}
|
||||
|
||||
template <typename T, typename>
|
||||
@ -274,19 +274,19 @@ namespace fmt
|
||||
void raw_append(std::string& out, const char*, const fmt_type_info*, const u64*) noexcept;
|
||||
|
||||
// Formatting function
|
||||
template <typename... Args>
|
||||
SAFE_BUFFERS FORCE_INLINE void append(std::string& out, const char* fmt, const Args&... args)
|
||||
template <typename CharT, std::size_t N, typename... Args>
|
||||
SAFE_BUFFERS FORCE_INLINE void append(std::string& out, const CharT(&fmt)[N], const Args&... args)
|
||||
{
|
||||
static constexpr fmt_type_info type_list[sizeof...(Args) + 1]{fmt_type_info::make<fmt_unveil_t<Args>>()...};
|
||||
raw_append(out, fmt, type_list, fmt_args_t<Args...>{fmt_unveil<Args>::get(args)...});
|
||||
raw_append(out, reinterpret_cast<const char*>(fmt), type_list, fmt_args_t<Args...>{fmt_unveil<Args>::get(args)...});
|
||||
}
|
||||
|
||||
// Formatting function
|
||||
template <typename... Args>
|
||||
SAFE_BUFFERS FORCE_INLINE std::string format(const char* fmt, const Args&... args)
|
||||
template <typename CharT, std::size_t N, typename... Args>
|
||||
SAFE_BUFFERS FORCE_INLINE std::string format(const CharT(&fmt)[N], const Args&... args)
|
||||
{
|
||||
std::string result;
|
||||
append<Args...>(result, fmt, args...);
|
||||
append(result, fmt, args...);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -2203,7 +2203,10 @@ void thread_ctrl::set_thread_affinity_mask(u64 mask)
|
||||
|
||||
if (shifted & 1)
|
||||
{
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wold-style-cast"
|
||||
CPU_SET(core, &cs);
|
||||
#pragma GCC diagnostic pop
|
||||
}
|
||||
|
||||
if (shifted <= 1)
|
||||
|
@ -832,7 +832,10 @@ std::vector<fs::file> SCEDecrypter::MakeFile()
|
||||
strm.avail_out = BUFSIZE;
|
||||
strm.next_in = data_buf.get()+data_buf_offset;
|
||||
strm.next_out = tempbuf;
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wold-style-cast"
|
||||
int ret = inflateInit(&strm);
|
||||
#pragma GCC diagnostic pop
|
||||
|
||||
while (strm.avail_in)
|
||||
{
|
||||
|
@ -1159,22 +1159,22 @@ void fmt_class_string<vm::_ptr_base<const char, u32>>::format(std::string& out,
|
||||
// Special case (may be allowed for some arguments)
|
||||
if (arg == 0)
|
||||
{
|
||||
out += u8"«NULL»";
|
||||
out += reinterpret_cast<const char*>(u8"«NULL»");
|
||||
return;
|
||||
}
|
||||
|
||||
// Filter certainly invalid addresses (TODO)
|
||||
if (arg < 0x10000 || arg >= 0xf0000000)
|
||||
{
|
||||
out += u8"«INVALID_ADDRESS:";
|
||||
out += reinterpret_cast<const char*>(u8"«INVALID_ADDRESS:");
|
||||
fmt_class_string<u32>::format(out, arg);
|
||||
out += u8"»";
|
||||
out += reinterpret_cast<const char*>(u8"»");
|
||||
return;
|
||||
}
|
||||
|
||||
const auto start = out.size();
|
||||
|
||||
out += u8"“";
|
||||
out += reinterpret_cast<const char*>(u8"“");
|
||||
|
||||
for (vm::_ptr_base<const volatile char, u32> ptr = vm::cast(arg);; ptr++)
|
||||
{
|
||||
@ -1182,9 +1182,9 @@ void fmt_class_string<vm::_ptr_base<const char, u32>>::format(std::string& out,
|
||||
{
|
||||
// TODO: optimize checks
|
||||
out.resize(start);
|
||||
out += u8"«INVALID_ADDRESS:";
|
||||
out += reinterpret_cast<const char*>(u8"«INVALID_ADDRESS:");
|
||||
fmt_class_string<u32>::format(out, arg);
|
||||
out += u8"»";
|
||||
out += reinterpret_cast<const char*>(u8"»");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1198,5 +1198,5 @@ void fmt_class_string<vm::_ptr_base<const char, u32>>::format(std::string& out,
|
||||
}
|
||||
}
|
||||
|
||||
out += u8"”";
|
||||
out += reinterpret_cast<const char*>(u8"”");
|
||||
}
|
||||
|
@ -346,8 +346,8 @@ namespace rsx
|
||||
m_cache_update_tag = rsx::get_shared_tag();
|
||||
}
|
||||
|
||||
template <typename... Args>
|
||||
void emit_once(bool error, const char* fmt, const Args&... params)
|
||||
template <typename CharT, std::size_t N, typename... Args>
|
||||
void emit_once(bool error, const CharT(&fmt)[N], const Args&... params)
|
||||
{
|
||||
const auto result = m_once_only_messages_set.emplace(fmt::format(fmt, params...));
|
||||
if (!result.second)
|
||||
@ -359,14 +359,14 @@ namespace rsx
|
||||
rsx_log.warning("%s", *result.first);
|
||||
}
|
||||
|
||||
template <typename... Args>
|
||||
void err_once(const char* fmt, const Args&... params)
|
||||
template <typename CharT, std::size_t N, typename... Args>
|
||||
void err_once(const CharT(&fmt)[N], const Args&... params)
|
||||
{
|
||||
emit_once(true, fmt, params...);
|
||||
}
|
||||
|
||||
template <typename... Args>
|
||||
void warn_once(const char* fmt, const Args&... params)
|
||||
template <typename CharT, std::size_t N, typename... Args>
|
||||
void warn_once(const CharT(&fmt)[N], const Args&... params)
|
||||
{
|
||||
emit_once(false, fmt, params...);
|
||||
}
|
||||
|
@ -427,8 +427,7 @@ namespace rsx
|
||||
|
||||
std::string get_message(u32 index, u32 processed, u32 entry_count)
|
||||
{
|
||||
const char* text = index == 0 ? "Loading pipeline object %u of %u" : "Compiling pipeline object %u of %u";
|
||||
return fmt::format(text, processed, entry_count);
|
||||
return fmt::format("%s pipeline object %u of %u", index == 0 ? "Loading" : "Compiling", processed, entry_count);
|
||||
};
|
||||
|
||||
void load_shaders(uint nb_workers, unpacked_type& unpacked, std::string& directory_path, std::vector<fs::dir_entry>& entries, u32 entry_count,
|
||||
|
@ -274,6 +274,12 @@ std::string vfs::get(std::string_view vpath, std::vector<std::string>* out_dir,
|
||||
return std::string{result_base} + vfs::escape(fmt::merge(result, "/"));
|
||||
}
|
||||
|
||||
#if __cpp_char8_t >= 201811
|
||||
using char2 = char8_t;
|
||||
#else
|
||||
using char2 = char;
|
||||
#endif
|
||||
|
||||
std::string vfs::escape(std::string_view path, bool escape_slash)
|
||||
{
|
||||
std::string result;
|
||||
@ -281,7 +287,7 @@ std::string vfs::escape(std::string_view path, bool escape_slash)
|
||||
|
||||
for (std::size_t i = 0, s = path.size(); i < s; i++)
|
||||
{
|
||||
switch (char c = path[i])
|
||||
switch (char2 c = path[i])
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
@ -294,7 +300,7 @@ std::string vfs::escape(std::string_view path, bool escape_slash)
|
||||
case 8:
|
||||
case 9:
|
||||
{
|
||||
result += u8"0";
|
||||
result += reinterpret_cast<const char*>(u8"0");
|
||||
result.back() += c;
|
||||
break;
|
||||
}
|
||||
@ -321,85 +327,85 @@ std::string vfs::escape(std::string_view path, bool escape_slash)
|
||||
case 30:
|
||||
case 31:
|
||||
{
|
||||
result += u8"A";
|
||||
result += reinterpret_cast<const char*>(u8"A");
|
||||
result.back() += c;
|
||||
result.back() -= 10;
|
||||
break;
|
||||
}
|
||||
case '<':
|
||||
{
|
||||
result += u8"<";
|
||||
result += reinterpret_cast<const char*>(u8"<");
|
||||
break;
|
||||
}
|
||||
case '>':
|
||||
{
|
||||
result += u8">";
|
||||
result += reinterpret_cast<const char*>(u8">");
|
||||
break;
|
||||
}
|
||||
case ':':
|
||||
{
|
||||
result += u8":";
|
||||
result += reinterpret_cast<const char*>(u8":");
|
||||
break;
|
||||
}
|
||||
case '"':
|
||||
{
|
||||
result += u8""";
|
||||
result += reinterpret_cast<const char*>(u8""");
|
||||
break;
|
||||
}
|
||||
case '\\':
|
||||
{
|
||||
result += u8"\";
|
||||
result += reinterpret_cast<const char*>(u8"\");
|
||||
break;
|
||||
}
|
||||
case '|':
|
||||
{
|
||||
result += u8"|";
|
||||
result += reinterpret_cast<const char*>(u8"|");
|
||||
break;
|
||||
}
|
||||
case '?':
|
||||
{
|
||||
result += u8"?";
|
||||
result += reinterpret_cast<const char*>(u8"?");
|
||||
break;
|
||||
}
|
||||
case '*':
|
||||
{
|
||||
result += u8"*";
|
||||
result += reinterpret_cast<const char*>(u8"*");
|
||||
break;
|
||||
}
|
||||
case '/':
|
||||
{
|
||||
if (escape_slash)
|
||||
{
|
||||
result += u8"/";
|
||||
result += reinterpret_cast<const char*>(u8"/");
|
||||
break;
|
||||
}
|
||||
|
||||
result += c;
|
||||
break;
|
||||
}
|
||||
case char{u8"!"[0]}:
|
||||
case char2{u8"!"[0]}:
|
||||
{
|
||||
// Escape full-width characters 0xFF01..0xFF5e with ! (0xFF01)
|
||||
switch (path[i + 1])
|
||||
switch (char2 c2 = path[i + 1])
|
||||
{
|
||||
case char{u8"!"[1]}:
|
||||
case char2{u8"!"[1]}:
|
||||
{
|
||||
const uchar c3 = reinterpret_cast<const uchar&>(path[i + 2]);
|
||||
const uchar c3 = path[i + 2];
|
||||
|
||||
if (c3 >= 0x81 && c3 <= 0xbf)
|
||||
{
|
||||
result += u8"!";
|
||||
result += reinterpret_cast<const char*>(u8"!");
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case char{u8"`"[1]}:
|
||||
case char2{u8"`"[1]}:
|
||||
{
|
||||
const uchar c3 = reinterpret_cast<const uchar&>(path[i + 2]);
|
||||
const uchar c3 = path[i + 2];
|
||||
|
||||
if (c3 >= 0x80 && c3 <= 0x9e)
|
||||
{
|
||||
result += u8"!";
|
||||
result += reinterpret_cast<const char*>(u8"!");
|
||||
}
|
||||
|
||||
break;
|
||||
@ -427,105 +433,105 @@ std::string vfs::unescape(std::string_view path)
|
||||
|
||||
for (std::size_t i = 0, s = path.size(); i < s; i++)
|
||||
{
|
||||
switch (char c = path[i])
|
||||
switch (char2 c = path[i])
|
||||
{
|
||||
case char{u8"!"[0]}:
|
||||
case char2{u8"!"[0]}:
|
||||
{
|
||||
switch (path[i + 1])
|
||||
switch (char2 c2 = path[i + 1])
|
||||
{
|
||||
case char{u8"!"[1]}:
|
||||
case char2{u8"!"[1]}:
|
||||
{
|
||||
const uchar c3 = reinterpret_cast<const uchar&>(path[i + 2]);
|
||||
const uchar c3 = path[i + 2];
|
||||
|
||||
if (c3 >= 0x81 && c3 <= 0xbf)
|
||||
{
|
||||
switch (path[i + 2])
|
||||
switch (static_cast<char2>(c3))
|
||||
{
|
||||
case char{u8"0"[2]}:
|
||||
case char{u8"1"[2]}:
|
||||
case char{u8"2"[2]}:
|
||||
case char{u8"3"[2]}:
|
||||
case char{u8"4"[2]}:
|
||||
case char{u8"5"[2]}:
|
||||
case char{u8"6"[2]}:
|
||||
case char{u8"7"[2]}:
|
||||
case char{u8"8"[2]}:
|
||||
case char{u8"9"[2]}:
|
||||
case char2{u8"0"[2]}:
|
||||
case char2{u8"1"[2]}:
|
||||
case char2{u8"2"[2]}:
|
||||
case char2{u8"3"[2]}:
|
||||
case char2{u8"4"[2]}:
|
||||
case char2{u8"5"[2]}:
|
||||
case char2{u8"6"[2]}:
|
||||
case char2{u8"7"[2]}:
|
||||
case char2{u8"8"[2]}:
|
||||
case char2{u8"9"[2]}:
|
||||
{
|
||||
result += path[i + 2];
|
||||
result.back() -= u8"0"[2];
|
||||
continue;
|
||||
}
|
||||
case char{u8"A"[2]}:
|
||||
case char{u8"B"[2]}:
|
||||
case char{u8"C"[2]}:
|
||||
case char{u8"D"[2]}:
|
||||
case char{u8"E"[2]}:
|
||||
case char{u8"F"[2]}:
|
||||
case char{u8"G"[2]}:
|
||||
case char{u8"H"[2]}:
|
||||
case char{u8"I"[2]}:
|
||||
case char{u8"J"[2]}:
|
||||
case char{u8"K"[2]}:
|
||||
case char{u8"L"[2]}:
|
||||
case char{u8"M"[2]}:
|
||||
case char{u8"N"[2]}:
|
||||
case char{u8"O"[2]}:
|
||||
case char{u8"P"[2]}:
|
||||
case char{u8"Q"[2]}:
|
||||
case char{u8"R"[2]}:
|
||||
case char{u8"S"[2]}:
|
||||
case char{u8"T"[2]}:
|
||||
case char{u8"U"[2]}:
|
||||
case char{u8"V"[2]}:
|
||||
case char2{u8"A"[2]}:
|
||||
case char2{u8"B"[2]}:
|
||||
case char2{u8"C"[2]}:
|
||||
case char2{u8"D"[2]}:
|
||||
case char2{u8"E"[2]}:
|
||||
case char2{u8"F"[2]}:
|
||||
case char2{u8"G"[2]}:
|
||||
case char2{u8"H"[2]}:
|
||||
case char2{u8"I"[2]}:
|
||||
case char2{u8"J"[2]}:
|
||||
case char2{u8"K"[2]}:
|
||||
case char2{u8"L"[2]}:
|
||||
case char2{u8"M"[2]}:
|
||||
case char2{u8"N"[2]}:
|
||||
case char2{u8"O"[2]}:
|
||||
case char2{u8"P"[2]}:
|
||||
case char2{u8"Q"[2]}:
|
||||
case char2{u8"R"[2]}:
|
||||
case char2{u8"S"[2]}:
|
||||
case char2{u8"T"[2]}:
|
||||
case char2{u8"U"[2]}:
|
||||
case char2{u8"V"[2]}:
|
||||
{
|
||||
result += path[i + 2];
|
||||
result.back() -= u8"A"[2];
|
||||
result.back() += 10;
|
||||
continue;
|
||||
}
|
||||
case char{u8"!"[2]}:
|
||||
case char2{u8"!"[2]}:
|
||||
{
|
||||
i += 3;
|
||||
result += c;
|
||||
continue;
|
||||
}
|
||||
case char{u8"<"[2]}:
|
||||
case char2{u8"<"[2]}:
|
||||
{
|
||||
result += '<';
|
||||
break;
|
||||
}
|
||||
case char{u8">"[2]}:
|
||||
case char2{u8">"[2]}:
|
||||
{
|
||||
result += '>';
|
||||
break;
|
||||
}
|
||||
case char{u8":"[2]}:
|
||||
case char2{u8":"[2]}:
|
||||
{
|
||||
result += ':';
|
||||
break;
|
||||
}
|
||||
case char{u8"""[2]}:
|
||||
case char2{u8"""[2]}:
|
||||
{
|
||||
result += '"';
|
||||
break;
|
||||
}
|
||||
case char{u8"\"[2]}:
|
||||
case char2{u8"\"[2]}:
|
||||
{
|
||||
result += '\\';
|
||||
break;
|
||||
}
|
||||
case char{u8"?"[2]}:
|
||||
case char2{u8"?"[2]}:
|
||||
{
|
||||
result += '?';
|
||||
break;
|
||||
}
|
||||
case char{u8"*"[2]}:
|
||||
case char2{u8"*"[2]}:
|
||||
{
|
||||
result += '*';
|
||||
break;
|
||||
}
|
||||
case char{u8"$"[2]}:
|
||||
case char2{u8"$"[2]}:
|
||||
{
|
||||
if (i == 0)
|
||||
{
|
||||
@ -552,15 +558,15 @@ std::string vfs::unescape(std::string_view path)
|
||||
|
||||
break;
|
||||
}
|
||||
case char{u8"`"[1]}:
|
||||
case char2{u8"`"[1]}:
|
||||
{
|
||||
const uchar c3 = reinterpret_cast<const uchar&>(path[i + 2]);
|
||||
const uchar c3 = path[i + 2];
|
||||
|
||||
if (c3 >= 0x80 && c3 <= 0x9e)
|
||||
{
|
||||
switch (path[i + 2])
|
||||
switch (static_cast<char2>(c3))
|
||||
{
|
||||
case char{u8"|"[2]}:
|
||||
case char2{u8"|"[2]}:
|
||||
{
|
||||
result += '|';
|
||||
break;
|
||||
|
@ -868,7 +868,7 @@ QString rsx_debugger::DisAsmCommand(u32 cmd, u32 count, u32 ioAddr)
|
||||
break;
|
||||
|
||||
case NV4097_SET_DEPTH_BOUNDS_TEST_ENABLE:
|
||||
DISASM(args[0] ? "Depth bounds test: Enable" : "Depth bounds test: Disable");
|
||||
DISASM("Depth bounds test: %s", args[0] ? "Enable" : "Disable");
|
||||
break;
|
||||
default:
|
||||
{
|
||||
|
@ -951,7 +951,7 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
|
||||
|
||||
// Sliders
|
||||
|
||||
EnhanceSlider(emu_settings::DriverWakeUpDelay, ui->wakeupDelay, ui->wakeupText, tr(u8"%0 µs"));
|
||||
EnhanceSlider(emu_settings::DriverWakeUpDelay, ui->wakeupDelay, ui->wakeupText, tr(reinterpret_cast<const char*>(u8"%0 µs")));
|
||||
SnapSlider(ui->wakeupDelay, 200);
|
||||
ui->wakeupDelay->setMaximum(7000); // Very large values must be entered with config.yml changes
|
||||
ui->wakeupDelay->setPageStep(200);
|
||||
|
@ -330,7 +330,7 @@ namespace stx
|
||||
{
|
||||
// Return data if reference count became zero
|
||||
pdata->m_ref_count = cb::c_ref_init;
|
||||
return unique_data(pdata);
|
||||
return unique_data<T>(pdata);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -19,7 +19,7 @@
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<AdditionalOptions>/Zc:throwingNew -d2FH4- %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalOptions>/std:c++latest /Zc:throwingNew -d2FH4- %(AdditionalOptions)</AdditionalOptions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>xxhash.lib;ws2_32.lib;Bcrypt.lib;avcodec.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib</AdditionalDependencies>
|
||||
|
Loading…
x
Reference in New Issue
Block a user