বৈশিষ্ট্য সনাক্তকরণ
libstdc++
সি প্রিপ্রোসেসর সংজ্ঞায়িত সহ বাস্তবায়ন বাস্তবায়িত হয় কিনা তা সনাক্ত করার জন্য এটি একটি স্নিপেট is
#include <regex>
#if __cplusplus >= 201103L && \
(!defined(__GLIBCXX__) || (__cplusplus >= 201402L) || \
(defined(_GLIBCXX_REGEX_DFS_QUANTIFIERS_LIMIT) || \
defined(_GLIBCXX_REGEX_STATE_LIMIT) || \
(defined(_GLIBCXX_RELEASE) && \
_GLIBCXX_RELEASE > 4)))
#define HAVE_WORKING_REGEX 1
#else
#define HAVE_WORKING_REGEX 0
#endif
ম্যাক্রো
_GLIBCXX_REGEX_DFS_QUANTIFIERS_LIMIT
মধ্যে সংজ্ঞায়িত করা bits/regex.tcc
হয়4.9.x
_GLIBCXX_REGEX_STATE_LIMIT
মধ্যে সংজ্ঞায়িত করা bits/regex_automatron.h
হয়5+
_GLIBCXX_RELEASE
এই উত্তরের7+
ফলাফল হিসাবে যুক্ত করা হয়েছিল এবং এটি জিসিসির প্রধান সংস্করণ
পরীক্ষামূলক
আপনি এটি জিসিসির সাথে এটি পরীক্ষা করতে পারেন:
cat << EOF | g++ --std=c++11 -x c++ - && ./a.out
#include <regex>
#if __cplusplus >= 201103L && \
(!defined(__GLIBCXX__) || (__cplusplus >= 201402L) || \
(defined(_GLIBCXX_REGEX_DFS_QUANTIFIERS_LIMIT) || \
defined(_GLIBCXX_REGEX_STATE_LIMIT) || \
(defined(_GLIBCXX_RELEASE) && \
_GLIBCXX_RELEASE > 4)))
#define HAVE_WORKING_REGEX 1
#else
#define HAVE_WORKING_REGEX 0
#endif
#include <iostream>
int main() {
const std::regex regex(".*");
const std::string string = "This should match!";
const auto result = std::regex_search(string, regex);
#if HAVE_WORKING_REGEX
std::cerr << "<regex> works, look: " << std::boolalpha << result << std::endl;
#else
std::cerr << "<regex> doesn't work, look: " << std::boolalpha << result << std::endl;
#endif
return result ? EXIT_SUCCESS : EXIT_FAILURE;
}
EOF
ফলাফল
বিভিন্ন সংকলকগুলির জন্য এখানে কিছু ফলাফল রয়েছে:
$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ ./a.out
<regex> doesn't work, look: false
$ gcc --version
gcc (GCC) 6.2.1 20160830
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ ./a.out
<regex> works, look: true
$ gcc --version
gcc (Debian 4.9.2-10) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ ./a.out
<regex> works, look: true
$ gcc --version
gcc (Ubuntu 6.2.0-5ubuntu12) 6.2.0 20161005
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ ./a.out
<regex> works, look: true
$ gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ ./a.out
<regex> works, look: true
$ gcc --version
gcc (GCC) 6.2.1 20160830
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ clang --version
clang version 3.9.0 (tags/RELEASE_390/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
$ ./a.out # compiled with 'clang -lstdc++'
<regex> works, look: true
এখানে ড্রাগন হতে হবে
এটি সম্পূর্ণ অসমর্থিত এবং জিসিসি বিকাশকারীরা bits/regex*
শিরোলেখগুলিতে প্রাইভেট ম্যাক্রো সনাক্তকরণের উপর নির্ভর করে । তারা যে কোনও সময় পরিবর্তন করতে এবং চলে যেতে পারে । আশা করা যায়, এগুলি বর্তমান 4.9.x, 5.x, 6.x রিলিজগুলিতে সরানো হবে না তবে তারা 7.x প্রকাশে যেতে পারে।
যদি জিসিসি বিকাশকারীরা #define _GLIBCXX_HAVE_WORKING_REGEX 1
x.x রিলিজ অব্যাহত রেখে একটি (বা কিছু, হিন্ট নজ নজ) যুক্ত করে থাকে তবে এই স্নিপেটটি অন্তর্ভুক্ত করার জন্য আপডেট করা যেতে পারে এবং পরে জিসিসি প্রকাশগুলি উপরের স্নিপেটের সাথে কাজ করবে।
আমি যতদূর জানি, অন্যান্য সমস্ত সংকলকগুলির <regex>
যখন __cplusplus >= 201103L
ওয়াইএমএমভি হয় তবে একটি কাজ থাকে ।
স্পষ্টতই যদি কেউ শিরোনামের বাইরে _GLIBCXX_REGEX_DFS_QUANTIFIERS_LIMIT
বা _GLIBCXX_REGEX_STATE_LIMIT
ম্যাক্রো সংজ্ঞায়িত করে তবে এটি সম্পূর্ণরূপে ভঙ্গ হবে stdc++-v3
।
<regex>
সমর্থন অসম্পূর্ণ। আমরা আপনাকে কী সাহায্য করতে পারি?